当我们使用 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个提交记录需要修改,其中 1
和 3
要合并成一次提交,并修改提交信息。这时我们可以使用 git rebase -i 1d5736c
来合并提交,这里的修订号要选择 1
的前一次提交。命令执行后会弹出一个 ./git/rebase-merge/git-rebase-todo
文件的文本编辑器,需要在这里来告诉 Git
该如何进行合并。
注释前面 pick
开始的行是初始值,也就是我们需要修改的地方,注释部分是帮助文档。这里每一行就是一次操作,执行顺序从上到下,你可以修改初始的执行顺序和操作,如果什么都不改则这次 rebase
操作什么都不会执行。
根据前面我们的修改要求,我们需要做下列的修改:
- 将
f3de84e
的pick
改为reword
,因为我们要修改提交信息; - 将
88368c6
移到下一行,因为要让位置给dcd112d
和f3de84e
进行合并; - 将
dcd112d
移到上一行并修改为fixup
,因为这一次提交要和f3de84e
合并; - 其他行保持不变。
注意:这里的修订号后面的提交信息只是给你看的,在这里修改它是没用的。
修改完后保存退出开始执行 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
: 丢弃这次提交。