【问题标题】:After a git rebase master mistakenly executed git pull instead of git push origin/your_branch -f在 git rebase master 错误地执行了 git pull 而不是 git push origin/your_branch -f
【发布时间】:2017-02-22 20:42:41
【问题描述】:

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

【问题讨论】:

    标签: git github version-control rebase git-rebase


    【解决方案1】:

    git reflog 已多次为我提供救援。

    此参考日志记录对本地存储库/分支/参考的更新。

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

    git reset --hard HEAD@{2}

    注意:在使用--hard之前绝对确定您的操作

    Git reflog documentation

    【讨论】:

    • 谢谢,我的分支修好了!使用 reflog 找到最后一个好的提交,将分支重置为该引用并以强制推送结束。
    【解决方案2】:

    运行git pull 只是一次获取,然后是上游分支的合并。假设合并成功并且您仍然签出了这个分支,这样的事情应该可以解决它:

    $ git reset @^1
    

    这会将分支重置为第一个父分支,该分支应该是重新定位的分支(第二个父分支是分支的旧上游版本的头部。)您可以在重置之前进行验证:

    $ git log --graph @^1
    

    $ gitk @^1
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2017-12-07
      • 2013-03-14
      • 2020-07-27
      • 1970-01-01
      • 2022-01-15
      • 2011-02-22
      相关资源
      最近更新 更多