場景:本地做了四次提交,想把第 2、3松忍、4 次提交合并跋理,只保留第二次提交的commit message
解決方案:
1择克、git reflog 查看所有的提交記錄
p.s. git reflog 可以查看所有分支的所有操作記錄(包括已經(jīng)被刪除的 commit 記錄和 reset 的操作);git log 命令可以顯示所有提交過的版本信息前普,看不到刪除的記錄肚邢。所以買后悔藥回退刪除記錄的時(shí)候,可以用 git reflog
上面的圖片展示了拭卿,一共四次提交骡湖,按照時(shí)間倒序排列分別是 第 4、3峻厚、2响蕴、1次提交
2、git rebase -i “最新的一個(gè)想保留的 Commit”
意思是惠桃,我想合并2浦夷、3、4辜王,那么最新一個(gè)想保留的 commit 就是 第一次 commit劈狐,他的hash值為 ae9c811,輸入下列命令并回車
git rebase -i ae9c811
或者
# 即將可以編輯的信息不包括起點(diǎn)呐馆,包括終點(diǎn)肥缔,起點(diǎn)比終點(diǎn)距離現(xiàn)在時(shí)間久遠(yuǎn)
git rebase -i [startpoint] [endpoint]
3、選擇要合并的 commit :上述步驟完成后會(huì)跳出下圖界面
注意這個(gè)時(shí)候的順序:最近一次提交在最下面
前面三行是我們需要操作的三個(gè) Commit汹来,每行最前面的是對該 Commit 操作的 Command续膳。關(guān)于每個(gè) Command 具體做什么改艇,下面的注釋寫得非常清楚。為了完成我們的需求坟岔,我們可以關(guān)注到這兩個(gè)命令:
# 使用該 Commit谒兄,但會(huì)被合并到前一個(gè) Commit 當(dāng)中
s, squash <commit> = use commit, but meld into previous commit
# 就像 squash 那樣,但會(huì)拋棄這個(gè) Commit 的 Commit message
f, fixup <commit> = like "squash", but discard this commit's log message
我們可以選擇把第 3炮车、4 次的commit message合并到第二次上面舵变,修改command如下,并保存退出:
4瘦穆、編輯合并 commit 的 commit message
上述步驟完成后纪隙,會(huì)跳出如下界面
通過下面的注釋,我們可以知道扛或,這里其實(shí)就是一個(gè)編寫 Commit Message 的界面绵咱,帶 # 的行會(huì)被忽略掉,其余的行就會(huì)作為我們的新 Commit Message熙兔,于是悲伶,我們編輯一下,保存退出
5住涉、檢查:使用git log檢查
git log
結(jié)果如下:
注意麸锉,使用git reflog仍可以查看最初的命令:
兩者的區(qū)別在于,git log只顯示保留的舆声,git reflog可以顯示 reset 和 rebase花沉、刪除的版本
編譯器的可視化git工具中的展示:
這個(gè)時(shí)候再push,提交記錄上就非常好看了
請注意: