今天碰到這麼一種情況,研究了好久也不知道怎麼辦,比如今天我寫了一大堆的功能,分別都已經 commit
了。舉個例子,commit
歷史大概是這樣的:commit message
分別為"1, 2, 3, 4",代表第一次到第四次提交。
假設我每次都是修改的同一個檔案 test.md
,在四次提交之後文件內容為:
1
2
3
4
即每次提交增加一行,對應內容為本次提交的commit message
。
然後現在我發現第二次提交有疏忽的地方,需要進行修改。就使用 git rebase -i HEAD~3
進入
互動頁面。如下圖所示,然後把第二次提交前面的 pick
改成 e
對第二次提交進行修改。
這個時候 test.md
裡面的內容是下面這個樣子的:
1
2
然後我需要加一些東西例如我在新增一行寫上 5
,然後 git add .
, git commit --amend
第二次的 commit
就改好了。然後執行git rebase --continue
,很顯然,因為之前第三行的內容在第三次提交的時候應該是3
,而這個時候我因為需要補充第二次的提交在第三行新加了一點東西,所以肯定會產生衝突,因此然後必須解決這個衝突才可以執行git rebase --continue
, 這個時候文件內容是這樣的:
1
2
<<<<<<< HEAD
5
=======
3
>>>>>>> 1269f10... 3
但是如果我把衝突解決了。 。那麼後面的 commit
資訊就全部遺失了。 。
然後我只能想到一個最笨的辦法就是直接退到第二次 commit
那個點,然後把所有的內容重新修改一遍。 。
但是要是我第三次和第四次修改的內容特別多。 。那就比較麻煩了。
我該怎麼解決這個衝突,才能使在保證後面的 commit
都不丟失的情況下把第二次的 commit
修改成功。 。
或是我的想法錯了。 。各位大大有沒有什麼好辦法。 。跪謝各位大大。 。
後面的commit 應該不會遺失才對,完成merge之後,再執行一次
git rebase --continue
。不過你的這種做法個人不太認同,一般沒必要去強行更改中間的commit,重新提交一個新的commit就好了。