前端 - 關於用 git rebase -i HEAD 修改之前某一次已經 commit 的程式碼
漂亮男人
漂亮男人 2017-05-02 09:32:51
0
1
642

今天碰到這麼一種情況,研究了好久也不知道怎麼辦,比如今天我寫了一大堆的功能,分別都已經 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 修改成功。 。
或是我的想法錯了。 。各位大大有沒有什麼好辦法。 。跪謝各位大大。 。

漂亮男人
漂亮男人

全部回覆(1)
曾经蜡笔没有小新
  1. 後面的commit 應該不會遺失才對,完成merge之後,再執行一次git rebase --continue

  2. 不過你的這種做法個人不太認同,一般沒必要去強行更改中間的commit,重新提交一個新的commit就好了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板