Git如何合并多次提交


当我们使用 Git 进行软件开发的时候,经常会碰到需要合并多次提交的场景。有的时候是因为上一次漏提交了代码,也有的是开发的代码分次进行了提交,反正发生的原因有很多种,一般工作中的项目也就不讲究随便去了,但是在社区项目中,这种就显得有点不专业了。今天博主分享一下 git rebase 的功能,是如何用来合并多次提交的。

修订上次提交

如果仅仅是对上一次提交的修改,最方便的方式还是使用 git commit --amend 命令。

# 补提交文件
git add a.txt
# 删除文件
git rm b.txt
# 修订上次提交
git commit --amend

接下来会弹出一个窗口让你对提交信息就行修订,如果不想修改的话直接关闭就可以直接完成提交了。如果只是想修改提交信息,直接执行 git commit --amend -m "修改后的提交信息"

合并多次提交

如果你已经进行了多次提交,那么就需要用到 git rebase 命令了。首先先用 git log --oneline 看下你的提交记录。

上图红框里的3个提交记录需要修改,其中 13 要合并成一次提交,并修改提交信息。这时我们可以使用 git rebase -i 1d5736c 来合并提交,这里的修订号要选择 1 的前一次提交。命令执行后会弹出一个 ./git/rebase-merge/git-rebase-todo 文件的文本编辑器,需要在这里来告诉 Git 该如何进行合并。

注释前面 pick 开始的行是初始值,也就是我们需要修改的地方,注释部分是帮助文档。这里每一行就是一次操作,执行顺序从上到下,你可以修改初始的执行顺序和操作,如果什么都不改则这次 rebase 操作什么都不会执行。

根据前面我们的修改要求,我们需要做下列的修改:

  1. f3de84epick 改为 reword,因为我们要修改提交信息;
  2. 88368c6 移到下一行,因为要让位置给 dcd112df3de84e 进行合并;
  3. dcd112d 移到上一行并修改为 fixup,因为这一次提交要和 f3de84e 合并;
  4. 其他行保持不变。

注意:这里的修订号后面的提交信息只是给你看的,在这里修改它是没用的。

修改完后保存退出开始执行 rebase 操作。因为第一行我们设置成了 reword,所以马上再次弹出一个文本编辑器,这次是为了让你修改 f3de84e 的提交信息,我们在这里修改保存后就会继续执行 rebase 操作。很快执行完毕后,再看 git log --oneline 就会发现我们的提交记录改变了。

注意:在 rebase 过程中如果中断了可以通过 git rebase --continue 继续,如果想放弃 rebase 可以执行 git rebase --abort 结束。

几种常用操作的说明

  • pick: 表示合并开始,到下一次开始合并或者结束之间的多次提交会合并成一次提交;
  • reword: 和 pick 一样可以作为合并的开始,不同之处是允许你修改提交信息;
  • edit: 和 reword 类似,不同之处是还允许你修改提交内容;
  • squash: 将这个提交合并到上一个;
  • fixup: 和 squash 类似,不同之处是不会合并提交信息,如果增加 -C 则使用这次的提交信息,如果增加 -c 则还会打开文本编辑器让你修改提交信息;
  • drop: 丢弃这次提交。

文章作者: Mingy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mingy !
评论
  目录