背景
在工作中,一般都是每个团队共同研发一个或多个项目,那么团队人员会共用一个公共仓库(这里说的时Git仓库)。每当有一个新的需求,我们会拉出一个特性分支,然后在这个特性分支上做开发以及提交个人的代码。
我有个习惯就是:为了确保代码的安全性,每天下班前会把个人的本地仓库代码提交到公共仓库。由于每天开发过程中由于各种原因会提交几次代码到个人仓库,这样就导致下班提交代码到公共仓库时,一次提交好几个记录,这样就会是的公共仓库有各种乱七八糟的所有增量修改历史。为了避免太多的提交而造成版本控制的混乱,通常我们推荐将这些提交合并成一个。
关于Git的常用命令,推荐翻阅Git常用命令
使用rebase合并提交
想要合并1-n条,有两个方法:
- 从HEAD版本开始往过去数
n
个版本
1 | git rebase -i HEAD~n |
- 指定一个合并区间
startpoint
和endpoint
,注意:该区间指定的是一个前开后闭的区间,意思就是startpoint不参与合并
1 | git rebase -i [startpoint] [endpoint] |
- -i 的意思是
--interactive
,即弹出交互式的界面让用户编辑完成合并操作 - startpoint 和 endpoint 指定了一个编辑区间
- 如果不指定endpoint,则该区间的终点endpoint默认是当前分支HEAD所指向的提交
操作
- 执行
git log
查看提交历史,接下来我们将三次提交合并为一个提交
- 执行
git rebase -i HEAD~3
,弹出操作窗口
操作说明:
- pick:保留该commit(缩写:p)
- reword:保留该commit,但我需要修改该commit的注释(缩写:r)
- edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
- squash:将该commit和前一个commit合并(缩写:s)
- fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
- exec:执行shell命令(缩写:x)
- drop:我要丢弃该commit(缩写:d)
根据我们的需求,我们将commit内容编辑如下:
1 | pick 85697ee This is first commit. |
上面的意思就是把第二次、第三次提交都合并到第一次提交上。
- 然后保存退出,Git会压缩提交历史。如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了
修改以后要记得敲下面的命令:
1 | git add . |
如果你想放弃这次压缩的话,执行以下命令:
1 | git rebase --abort |
- 如果没有冲突,或者冲突已经解决,则会出现如下的编辑窗口
我们将三次提交信息合并成一个提交信息
1 | Commit feature branch! |
- 编辑完保存即可完成commit的合并了,我们执行一下
git log
有没有感觉提交记录清爽了许多,快来试试吧!