2014-10-28 124 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 

但我怀疑有一个更容易/更好的方法来做到这一点。