Git 改變歷史
悔棋
修改最近一次提交資訊
git commit --amend
除了想要修改最近一次提交資訊外,另一個用處是生成Change-ID。在克隆了程式碼和鉤子檔案後,如果程式碼提交中沒有Change-ID,而後續需要提交到gerrit無法自動生成Change-ID報錯時,使用此命令。
修改最近一次提交中的檔案
git checkout HEAD^ -- helloworld.c
檢出
修改
git commit --amend -m "commit with --amend helloworld.c"
提交
多步悔棋
git reset --soft HEAD^^
想把幾個提交合一就會退幾步
git commit -m "modify helloworld.c"
提交
穿越
- 刪除某次提交,後續不變
- 合併歷史中的幾次提交,後續不變
揀選操作
揀選操作 cherry-pick
刪除某提交
git checkout 要刪除提交前的雜湊值
git cherry-pick 一個一個後續提交
git checkout master
切回master
git reset --hard HEAD@{1}
HEAD@{1}就是之前cherry-pick後的HEAD
cherry-pick的雜湊值 之後修改的內容相同但是提交的雜湊值不同
合併某兩次提交
git checkout 要合併提交的雜湊值
git reset --soft HEAD^^
回到兩次提交前
git commit
提交資訊
git cherry-pick 一個一個後續提交
git checkout master
切回master
git reset --hard HEAD@{1}
HEAD@{1}就是之前cherry-pick後的HEAD
變基操作 rebase
比如將ABCDEF變成ABCEF
git rebase --onto <newbase> <since> <till>
<newbase> 是C的雜湊值
<since> 是E^的雜湊值(從這裡開始但是不包括這個
<till> 是F的雜湊值(到這裡結束包括這個
git checkout master
git reset --hard HEAD@{1}
比如將ABCDEF變成AB(CD)EF
git checkout D的雜湊值
git reset --soft HEAD^^
退到B了
git commit
提交資訊 記住提交的雜湊值xxx
git rebase --onto xxx E^ master