场景:有时候我们修改一个Bug或者一段代码的时候, commit 一次之后,发现 Bug 没改对或者这段代码需要再优化之类的,改完之后又 commit 了一次或多次,这样就会感觉提交历史不太美观(有点强迫症),这个时候我们就希望只想保留一次提交历史记录,合并为一个完整的提交,该怎么办呢?git rebase
应运而生!
git rebase
命令:将多次commit合并,只保留一次提交历史记录。
1、git log
查看提交历史记录
我们需要将
8d583c56
、ba29f993
、0963cff1
、d5932e0d
、71101808
、d8915ad2
合并为一个commit。
2、git 压缩 git rebase -i HEAD~6
or git rebase -i 10b73908
-i
的参数是不需要合并的commit
的hash
值,这里的10b73908
为d8915ad2
的前一次提交记录; 该命令执行后,进入vi
的编辑模式,6次提交的commit倒序排列,最下面的是最近的一次提交记录。
- 修改第2~6行的第一个单词
pick
为squash
ors
,然后 输入:wq
orx
保存退出。pick
的意思是要执行这个commit
squash
的意思是这个commit
会被合并到前一个commit
- git 会压缩提交历史,若有冲突,需要进行修改,修改的时候保留最新的历史记录,修改完之后输入以下命令:
git add .
git rebase --continue
- 若想退出放弃此次压缩,执行命令:
git rebase --abort
- 若无冲突 or 冲突已 fix,则会出现一个
commit message
编辑页面,修改commit message
,然后 输入:wq
orx
保存退出。
3、同步到远程 git
仓库
输入:git push -f
or git push --force
查看远程仓库效果,多次 commit 已被合并成一次 commit。