如何重置为合并提交前的状态?
How to reset to the state before a merge was committed?
我已经解决了一些冲突并提交了合并。是否可以完全恢复 运行 git commit
之前的合并状态,而不更改索引或工作树?对于常规的单亲提交,执行此操作的命令是 git reset --soft HEAD^
,但对于合并提交,它不会按预期工作,因为没有要重置为的单亲。
你有一个commit-sha for your merge state
。通过 git log
或 git 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")。
我已经解决了一些冲突并提交了合并。是否可以完全恢复 运行 git commit
之前的合并状态,而不更改索引或工作树?对于常规的单亲提交,执行此操作的命令是 git reset --soft HEAD^
,但对于合并提交,它不会按预期工作,因为没有要重置为的单亲。
你有一个commit-sha for your merge state
。通过 git log
或 git 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")。