簡介
在日常開發中,代碼變更比較頻繁,有時候想讓前幾次提交的合并為一次提交,這里可以使用git rebase -i 命令來完成,當然,git rebase命令不僅僅用于合并提交,它還有許多用處,比如可以使用git rebase onto將某一段commit粘貼到另一個分支上等等,這里主要介紹合并提交。
命令介紹
rebase為變基
git rebase -i 命令可以壓縮合并多次提交
格式:`git rebase -i [startpoint] [endpoint]`
其中-i的意思是–interactive,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint] [endpoint]則指定了一個編輯區間,如果不指定[endpoint],則該區間的終點默認是當前分支HEAD所指向的commit(注:該區間指定的是一個前開后閉的區間)。
在查看git的log后,可以使用如下命令
// 合并從當前head到15f745b(commit id)
`git rebase -i 15f745b`
或:
// 合并最近的兩次提交
git rebase -i HEAD~2
```
// 合并從當前head到15f745b(commit id)
git rebase -i 15f745b
或:
// 合并最近的兩次提交
git rebase -i HEAD~2
```
執行這個命令后會跳到一個vi編輯器
里面的提示有:
```
pick:保留該commit(縮寫:p)
reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
edit:保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
squash:將該commit和前一個commit合并(縮寫:s)
fixup:將該commit和前一個commit合并,但我不要保留該提交的注釋信息(縮寫:f)
exec:執行shell命令(縮寫:x)
drop:我要丟棄該commit(縮寫:d)
```
實操
這里在終端輸入: git rebase -i HEAD~2 這里的 HEAD~2 表示合并最近兩次的提交, 如果想合并最近三次的提交修改為: git rebase -i HEAD~3

需要做的是,將第二行的 pick 改為 s, “s” 為 “squash” 的縮寫,“squash” 的意思是將這個提交壓縮為最后一次提交

保存后彈出這樣的
將 This is the commit message #2 下面的內容改成你想提交的概述即可
最后保存退出即可

2021.1.11更新
發現IDEA2020.3的版本控制可以更方便的做這個操作

右鍵,點擊Squash Commits即可