2014-10-28 146 views
2

我意外修改了合併提交而不是創建新提交。現在我不知道如何提取我可以推送的正常提交的更改。這些更改將顯示在gitk中,但不會以format-patch顯示。請幫忙。Git:恢復我修改後的更改合併提交

+1

取決於你做了什麼'git reset HEAD @ {1}'可能會工作。首先檢查'git reflog'。 – 2014-10-28 03:46:34

+0

對我不起作用:( – Artem 2014-10-28 03:57:54

+0

什麼是reflog輸出?你應該能夠從它得到原始合併提交的SHA,這取決於你做了什麼,它可能是在不同的位置,雖然。 – 2014-10-28 03:59:59

回答

3

您有2個感興趣的SHA - 原始合併提交和修改的合併提交。你想要做的是git resetHEAD原來的合併提交,同時保留您的索引和工作目錄。然後您可以創建一個掛起合併提交的新提交。

使用

git reflog

發現,原來合併的SHA提交

復位到提交與引用日誌 git reset ORIGINAL_MERGE_COMMIT_SHA或直接與git reset [email protected]{X}其中X是1或引用日誌的位置代表合併提交。

您現在應該準備好git commit您的原始更改,並且不會在此處傳入--amend,您將創建一個新的提交。

2

我發現其中一個工作方式:

git diff HEAD~1 > p.patch 
git checkout master 
git checkout -b branch-name 

手動編輯p.patch從合併去除不相關的更改。

git apply p.patch 

但我懷疑有一個更容易/更好的方法來做到這一點。