Git 重置并还原

Git reset and revert

不小心把错误的分支合并到master上,推到了origin

问题是,我已将 masterbranch 重置为 git reset --hard xxx 提交哈希之前的最后一个分支,以及 git push origin master --force 的原点,但现在合并提交始终存在。

更好的解决方案是使用git revert -m 1 <merge-commit>,但我没有:/

现在,在这种状态下,我怎样才能撤消合并并清除历史记录? 也许,再次合并并还原!?

这里没有必要恢复任何东西。您几乎有了正确的解决方案,但您重置为不正确的提交。解决这个问题的方法是 运行:

git reset --hard <pre-merge commit hash>

这会将您的主 b运行ch 重置为 合并之前的提交。从这里,您可以 运行:

git push origin master --force

像以前一样重置您的远程主机 b运行ch。您 运行 错误地将 master b运行ch 指向合并提交哈希的命令。

为了您自己的背景知识,如果您查看 .git/refs/heads,您会看到一个与您的 b运行 同名的文件列表。这些文件的内容只是它们指向的每个提交的哈希值。这就是 b运行ch 的全部内容:对提交的引用。

当您 运行 git reset --hard <merge commit hash> 时,您使主文件 b运行ch(就是这个非常简单的参考文件)指向合并提交。通过将其指向 before 合并,您将更新这个简单的 master b运行ch 引用以指向合并前提交的哈希值。

你在做

git log --oneline

查看合并前的提交

然后在没有任何重置的情况下恢复到合并之前的那个提交!作为新提交再次推送到原点后。

还原意味着您的下一个快照将与合并前的快照相同,但您错误的合并提交将保存在整个提交历史记录中 - 最好保留在那里。尽可能避免 git 硬重置。