在 git rebase master 错误地执行 git pull 而不是 git push origin/your_branch -f 之后

After a git rebase master mistakenly executed git pull instead of git push origin/your_branch -f

可能是因为睡眠不足,而不是在 git rebase master 之后执行强制推送,我执行了 git pull。现在我的拉取请求搞砸了,包括来自 master 的所有提交。 有什么建议可以恢复吗?

运行 git pull 只是一个获取,然后是上游分支的合并。假设合并成功并且你仍然检查了这个分支,这样的事情应该修复它:

$ git reset @^1

这会将分支重置为第一个父级,它应该是重新设置分支的分支(第二个父级是分支的旧上游版本的负责人。)您可以在进行重置之前验证:

$ git log --graph @^1

$ gitk @^1

如果这些看起来正常,那么重置应该就可以了。它不会触及您工作树中的文件,因此您可以查看这是否导致了任何令人惊讶的变化。我怀疑会有 none 因为就代码而言,合并可能是空操作(再次假设它成功了。)

git reflog 多次来救我。

此参考日志记录了您本地 repository/branches/references 的更新。

因此,如果您在这种情况下直接在拉取之前找到所需分支的头提交,则可以将当前分支重置为该引用。例如重置为 HEAD@{2}

git reset --hard HEAD@{2}

注意:在使用 --hard

之前,绝对确定 您的操作

Git reflog documentation