Git 應用: 取用多個commit

2021-06-03

commit 的戲法

例如你之前已經在 newImage branch 上做了一些 commit,然後又開了一個 branch 叫做 caption ,並且在上面做了一些相關的 commit ,因此它們看起來是一個接著一個的。 

有點棘手的就是有時候你又想在之前的 commit 裡面做一些修改。在這個例子裡面,我們要去稍微修改一下 newImage 所指向的 commit,儘管已經是之前的 commit 了

為了克服這個困難,我們可以按照下面的方法來做:

  • 先用 git rebase -i 將 commit 重新排序,然後把我們想要修改的 commit 移到最前面
  • 然後用 git commit --amend 來進行一些修改
  • 接著再用 git rebase -i 來將他們按照最開始的順序重新排好
  • 最後我們把 main 移到這個修改的最前端(用你自己喜歡的方法),就大功告成 

如以下範例:

輸入以下指令:

git rebase -i HEAD~2 //產生互動式rebase

互換C3與C4可得下圖

接著輸入以下指令來改寫提交:

git commit --amend

接著同樣使用以下指令:

git rebase -i HEAD~2 //產生互動式rebase
來將c2與c3互換

最後我們把 main 移到這個修改的最前端:

git branch -f main caption 

https://weather-research-daily.webnode.tw/l/git-%e5%b8%b8%e7%94%a8%e6%8c%87%e4%bb%a42/

移動方式請參考上述連結 

commit 的戲法#2

如上所看到的,我們使用 rebase -i 來重新排列那些 commit。只要把我們想要修改的 commit 移到最前面,我們就可以很容易地重新修改它,然後再把它們重新排成我們想要的順序。

但唯一的問題就是這樣做就要排很多次,有可能造成 rebase conflict。下面就看看用另外一種方法 git cherry-pick 是怎麼做的吧!

請輸入指令:

git checkout main //將HEAD指向main
git cherry-pick newImage //將newImage接續main
git checkout main^ //將HEAD指向main 上一層
git cherry-pick main //將main接續HEAD

 git cherry-pick caption //將caption接續HEAD
git branch -f main HEAD //將main移至HEAD

其結果如下圖

Miller : hhjoy222@gmail.com
Webnode 提供技術支援
免費建立您的網站! 此網站是在 Webnode 上建立的。今天開始免費建立您的個人網站 立即開始