如何重置为合并提交前的状态?

How to reset to the state before a merge was committed?

我已经解决了一些冲突并提交了合并。是否可以完全恢复 运行 git commit 之前的合并状态,而不更改索引或工作树?对于常规的单亲提交,执行此操作的命令是 git reset --soft HEAD^,但对于合并提交,它不会按预期工作,因为没有要重置为的单亲。

你有一个commit-sha for your merge state。通过 git loggit reflog 命令查找提交。

$ git reflog                       # copy the commit-sha of merge state
$ git reset --soft <commit-sha>

$ git status                       # see the undo changes

N.B。如果你这样做 --soft reset 那么你返回的提交的更改存在于你的工作目录中。

git reset --soft HEAD^git reset --soft HEAD^1 的同义词,意思是软重置到第一个 parent。如果是第二个parent(second parent != grandparent,那就是HEAD~2)你想重置到,用git reset --soft HEAD^2。或者你当然也可以做 git reset --soft @{1} 这意味着如果合并是你做的最后一件事,那么当前分支的 reflog 中的第一个条目。

我认为这不受支持,但您可以通过执行 git reset --soft HEAD@{1} 然后将要合并的提交 ID 写入 .git/MERGE_HEAD.

来伪造它

不过您会丢失提交消息 ("Merge commit 'cafebab' into HEAD")。