Git改變歷史-章節筆記

一般摸鱼。發表於2024-06-21

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

相關文章