Git:恢复我的修改,修改为合并提交

时间:2014-10-28 03:37:34

标签: git git-commit git-commands

我意外地修改了合并提交而不是创建新的提交。现在我不知道如何将更改提取到我可以推送的正常提交。更改将以gitk显示,但不会出现在format-patch中。请帮忙。

3 个答案:

答案 0 :(得分:3)

我找到了一种有效的方法:

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

手动编辑p.patch以从合并中删除不相关的更改。

git apply p.patch

但我怀疑有一种更容易/更好的方法。

答案 1 :(得分:3)

您有两个感兴趣的SHA - 原始合并提交和修改后的合并提交。您要做的是git reset HEAD到原始合并提交,同时保留索引和工作目录。然后,您可以创建一个挂起合并提交的新提交。

使用

git reflog

找到原始合并提交的SHA

重置为提交 git reset ORIGINAL_MERGE_COMMIT_SHA或直接来自带有git reset HEAD@{X}的reflog,其中X为1或reflog中代表合并提交的位置。

您现在应该准备git commit原始更改,并且不要在此处传入--amend,您将创建一个新提交。

答案 2 :(得分:0)

这对我有用:

  • 获取原始合并提交和修改后的合并提交的 SHA
  • git reset --hard xxx 其中 xxx 是修改后的合并提交 SHA
  • git reset --soft yyy 其中 yyy 是原始合并提交 SHA

这让我不小心修改了更改。