在日常开发中,常常会遇到自己正在开发某个feature
的时候,需要切到另外的分支去处理bug
。于是先将未完成的功能commit
到本地。处理完bug
之后,再切回来开发,这种做法有一个坏处是,仓库commit
的历史会很凌乱。不利于追踪排查历史问题。
以上为前提条件,这种情况可以使用 git rebase
来处理,合并多个本地的commit
,今天以这边文章的提交历史,来做个示范。
注意,这种合并方式,只对未
push
到远端的commit
有效
首先查看下这个仓库的提交历史记录:
git log
输出如下图:
使用 rebase
将多个commit
合并成一个。
git rebase -i HEAD~[number_of_commits]
可以看到,我们这里有三条commit
记录,只需要修改末尾的number_of_commits
参数。
git rebase -i HEAD~3
终端输出如下图:
第一列是rebase
具体执行的操作,其中操作可以选择,其中含义如下:
pick
,git
会应用这个补丁,以同样的提交信息(commit message
)保存提交reword
,git
会应用这个补丁,但需要重新编辑提交信息edit
,git
会应用这个补丁,但会因为amending
而终止squash
,git
会应用这个补丁,但会与之前的提交合并fixup
,git
会应用这个补丁,但会丢掉提交日志exec
,git
会在shell
中运行这个命令
这里我们将第一个提交保留,将第二第三个提交合并到第一个提交里面去,将第二个和第三个commit
前的pick
改成s
,然后保存退出。输出如下图:
修改commit
信息,保存,并退出。然后使用git log
查看commit
记录:
可以看到,刚刚的三条记录已经被合并了。接下来只需要push
到远端仓库就行了。