欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > git rebase-优雅合并与修改提交

git rebase-优雅合并与修改提交

2025/9/26 20:31:35 来源:https://blog.csdn.net/trayvontang/article/details/144089154  浏览:    关键词:git rebase-优雅合并与修改提交

文章目录

  • 简介
  • rebase用于合并
  • 使用rebase修改提交
  • cherry-pick

简介

在Git核心概念图例与最常用内容操作(reset、diff、restore、stash、reflog、cherry-pick)中我们已经介绍了git的最常用实用的命令。

在上面说的那篇文章中,我们只是简单提了一下rebase。

是因为rebase比较复杂,并且用的相对较少,因为我们通常更喜欢用merge。

但是rebase绝对是有强迫症朋友的福音,尽管rebase非常危险,但是它非常优雅。

能让我们的提交历史看起来简洁清晰。

这一篇我们就来简单感受一下rebase命令的魅力吧。

rebase用于合并

rebase和merge一样,可以用来合并分支。

和merge不同,rebase不会创建一个新的合并节点。

而是把要合并的分支节点依次放在目标合并分支节点的后面。

我们看一下下面这个例子,先看一下基础提交:

基础提交信息

我们先使用merge方式合并代码看看:

git merge feature-a

merge方式合并

我们把merge回退了:

 git reset --hard head^

用rebase来合并:

# 将feature-a rebase到当前分支
git rebase feature-a# 等价于下面这个命令
git rebase feature-a master

有冲突,解决冲突之后,使用下面命令继续:

# 解决冲突之后add,表示冲突已经解决了,可以继续合并了
git add .
# 然后继续rebase
git rebase --continue# 当然,我们也可以使用abort参数终止rebase
git rebase --abort

git rebae冲突

rebase合并完成之后的状态:

合并之后状态

对于只有我们自己提交的功能分支,我们就可以使用rebase来合并。

merge合并的步骤:

  1. 将master分支的最新节点MN的快照
  2. feature分支最新节点CN的快照
  3. 与两个分支共同Parent节点MFN的快照执行三路合并生成新的快照
  4. 基于上一步合并之后的快照生成一个连接master分支与feature分支的节点MFN
  5. 将master指向最新合并节点MFN

merge合并示意图

rebase合并步骤:

  1. 找出当前所在分支和变基分支的共同Parent节点,MP
  2. 将feature分支中MP之后节点的快照暂存,如F1、F2、F3…
  3. 将上一步暂存的快照(F1、F2、F3…)应用到master分支,根据时间顺序

使用rebase修改提交

rebase除了用来合并分支,还可以用来修改提交。

命令说明
pick保留该commit,缩写:p
reword保留该commit,需要修改该commit的注释,缩写:r
edit保留该commit, 要修改该提交,和reword不同,edit不仅仅可以修改注释,缩写:e
squash将该commit和前一个commit合并,缩写:s
fixup将该commit和前一个commit合并,但不要保留该提交的注释信息,缩写:f
exec执行shell命令,缩写:x
drop丢弃该commit,缩写:d

我们知道commit --amend可以修改提交,但是,只能修改最后一次,如果要修改多次,怎么办呢?

可以使用rebase。

git commit --amend -m 'commit message'

使用交互模式,修改最近5次提交:

git rebase -i HEAD~5

rebase 交互操作选择
默认是pick表示使用提交,可以对这些commit上下移动从而对提交进行重排序,当退出编辑器时,git会按照指定的顺序去应用提交,并且做出相应的操作。

选择要修改的commit,选择对应的操作

选择rebase操作

根据提示继续操作:

rebase提示

我们根据提示,使用git commit --amend命令继续:

rebase执行完成情况

因为edit不仅仅可以修改提示,还可以修改其他,所以需要我们手动提示继续:

git rebase --continue

rebase squash合并提交

完成:

rebase完成信息提示

我们再看看修改之后的历史信息:

rebase之后的历史信息

cherry-pick

之前文章我们已经介绍过cherry-pick,前面我们了解了rebase,再回过头来看cherry-pick。

可以发现cherry-pick,就是特殊的rebase。

# 首先切到指定分支
git checkout b1
# 查看需要pick哪些提交
git log --oneline# 切回到pick分支
git checkout master# cherry-pick指定的commit
git cherry-pick 1f54b01 0fed6dd# 如果有冲突手动解决冲突,然后add
git add .# 继续cherry-pick处理commit信息
git cherry-pick --continue

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词