我搞砸了。我將其他分支合併到我的分支。雙方的變化都很大,所以我花了很長時間來解決衝突。提交合並後,我意識到我忘記添加一個文件,因此合併提交不完整。我不想用「被遺忘的改變」提交污染歷史,所以我決定在推送前修復它。我打了個電話修復git中的合併提交
git reset --soft HEAD~
然後我補充了錯過的更改並希望重新提交。但是,git不再知道它應該是合併提交。如果不重新進行整個合併,有什麼出路嗎?
我搞砸了。我將其他分支合併到我的分支。雙方的變化都很大,所以我花了很長時間來解決衝突。提交合並後,我意識到我忘記添加一個文件,因此合併提交不完整。我不想用「被遺忘的改變」提交污染歷史,所以我決定在推送前修復它。我打了個電話修復git中的合併提交
git reset --soft HEAD~
然後我補充了錯過的更改並希望重新提交。但是,git不再知道它應該是合併提交。如果不重新進行整個合併,有什麼出路嗎?
我會怎麼做,如果我想修改我的最後一次提交(無論是合併提交或正常提交):
git add .
添加持續的變化與
git的承諾提交--amend
大功告成
既然你是不是在這一點上現在,首先你必須回到那裏。怎麼樣?
列出最後一個引用,以瞭解您想要還原的合併提交的哈希是什麼。執行
的git reflog了在該列表中
搜索和複製合併的哈希提交。尋找像[...]合併起源/ blablabal,就像[...] ...]重置移動到HEAD〜
重置爲提交(因爲如果你沒有做過git reset --soft HEAD~
)
的git的復位 - 硬HASH_FROM_BULLET_2
現在你在剛剛提交原始合併的位置,現在可以從開始處理4,5和6。
您可以檢出到分支上的特定提交,因此請在合併發生之前返回並重新完成所有操作。
下去合併分支:
git log
會顯示所有提交與相關ID(或鍵)分支只是複製所需的第一個字母提交鍵
git checkout [commit_id you copied]
您現在應該在合併之前在分支上。 如果你想繼續瀏覽提交,你可以保持提交id的結帳。
我知道我可以「重做一切」,但我問我是否可以解決它「沒有重新進行整個合併」(因爲這不是一件容易的事)。 –
請注意,如果您*結帳*以前的提交,您處於'detached HEAD狀態',並且您無法在該狀態下提交任何內容。如果你想重做合併(沒有必要,正如我在另一個答案中所解釋的那樣),你必須*硬重置*以提交'git reset --hard [commit_id_you_copied]' –
這樣工作就像一個魅力。非常感謝你! –