使用Git进行协作开发时,因为各种外界不可抗因素(会心一笑😊),我们通常会在自己的开发分支进行多次commit后才合并到开发分支,对于追(jing)求(shen)优(jie)雅(pi)的我们👶来说一坨commit挤在SourceTree上简直让人有怒删dev的冲动有没有!!(好吧我承认并没有🈚️)
为了优雅的处理多次commit造成的视觉及心灵创伤🤕️(严肃起来😠),偶然寻觅到一种压缩本地commit的方法,可以将本地多个commit压缩为一个包含所有commit全部变更的单一commit(语法十分精炼需要多读几遍👏),最最理想的情况下每个feature应该只对应一次commit。
优点
- 历史清晰 SourceTree优雅
- 方便基友们(还有可爱的妹纸们👧) Code Review
Git压制提交
将多次本地commit压缩为一次commit(分支未推到远程仓库)
建议在分支未推到远程仓库时操作,如果已经推到远程仓库又必须必须必须必须必须要合并这些commit,可以先将远程分支删除(玩坏了不怪我咯)
煮个🌰:
- 初始状态:
SourceTree:
使用git log
命令查看所有提交历史:
我们要将红框内的三条commit合并为一条commit,选中三条提交中最早的commit的父提交(⚠️就是这么绕口),获得它的commit_id
值,如下图:
- 衍合操作
命令格式: git rebase –i commit_id
commit_id为待合并提交中最早commit的父提交,上文已经获得。
commit_id: 唯一标识一次commit,是本次commit与Git仓中内容和头信息的一个校验和,使用git log
或者在sourceTree中选中特定commit,右键选择"复制SHA1到剪切板"即可获得。
取commit_id前七八位即可(坚信地球上没有那么多Hash冲突👶)。
本例中为: git rebase -i 1c76461a21a8
- 压制提交
pick:执行该commit
squash:将此版本的commit合并到前一个commit
定义如下⬇️
so, 将后两条提交前面的pick全部改为squash
使用:wq退出
使用:wq退出
vim操作:i 编辑 esc 退出编辑 :wq 退出
- 回到SourceTree,三次commit已经被合并为一次提交。
- 修改提交信息
我们得到了一个包含前三次提交的全部变更的单一提交,它包含了三次提交的所有说明信息。
如果需要修改说明信息⬇️(看你心情咯👶)
修改最近一次提交说明 git commit --amend
修改提交信息:
修改结束,:wq退出。
使用git log
查看:
大功告成🏃。
- 参考链接