2017-08-16 149 views
1

我搞砸了。我將其他分支合併到我的分支。雙方的變化都很大,所以我花了很長時間來解決衝突。提交合並後,我意識到我忘記添加一個文件,因此合併提交不完整。我不想用「被遺忘的改變」提交污染歷史,所以我決定在推送前修復它。我打了個電話修復git中的合併提交

git reset --soft HEAD~ 

然後我補充了錯過的更改並希望重新提交。但是,git不再知道它應該是合併提交。如果不重新進行整個合併,有什麼出路嗎?

回答

2

我會怎麼做,如果我想修改我的最後一次提交(無論是合併提交或正常提交):

  • 做改變(在你的案件添加文件)
  • 階段變化。例如。與git add .
  • 添加持續的變化與

    git的承諾提交--amend

  • 大功告成

    既然你是不是在這一點上現在,首先你必須回到那裏。怎麼樣?

    1. 列出最後一個引用,以瞭解您想要還原的合併提交的哈希是什麼。執行

      的git reflog了在該列表中

    2. 搜索和複製合併的哈希提交。尋找像[...]合併起源/ blablabal,就像[...] ...]重置移動到HEAD〜

    3. 重置爲提交(因爲如果你沒有做過git reset --soft HEAD~

      的git的復位 - 硬HASH_FROM_BULLET_2

    現在你在剛剛提交原始合併的位置,現在可以從開始處理4,5和6。

    +0

    這樣工作就像一個魅力。非常感謝你! –

    1

    您可以檢出到分支上的特定提交,因此請在合併發生之前返回並重新完成所有操作。

    下去合併分支:

    git log 
    

    enter image description here

    會顯示所有提交與相關ID(或鍵)分支只是複製所需的第一個字母提交鍵

    git checkout [commit_id you copied] 
    

    您現在應該在合併之前在分支上。 如果你想繼續瀏覽提交,你可以保持提交id的結帳。

    +0

    我知道我可以「重做一切」,但我問我是否可以解決它「沒有重新進行整個合併」(因爲這不是一件容易的事)。 –

    +0

    請注意,如果您*結帳*以前的提交,您處於'detached HEAD狀態',並且您無法在該狀態下提交任何內容。如果你想重做合併(沒有必要,正如我在另一個答案中所解釋的那樣),你必須*硬重置*以提交'git reset --hard [commit_id_you_copied]' –