【发布时间】:2017-02-22 20:42:41
【问题描述】:
可能是由于缺乏睡眠而不是在git rebase master 之后执行强制推送,我执行了git pull。现在我的拉取请求被搞砸了,包括来自主人的所有提交。
有什么建议可以恢复吗?
【问题讨论】:
标签: git github version-control rebase git-rebase
可能是由于缺乏睡眠而不是在git rebase master 之后执行强制推送,我执行了git pull。现在我的拉取请求被搞砸了,包括来自主人的所有提交。
有什么建议可以恢复吗?
【问题讨论】:
标签: git github version-control rebase git-rebase
git reflog 已多次为我提供救援。
此参考日志记录对本地存储库/分支/参考的更新。
因此,如果您在这种情况下直接在拉取之前找到所需分支的头部提交,您可以将当前分支重置为该引用。例如重置为HEAD@{2}
git reset --hard HEAD@{2}
注意:在使用--hard之前绝对确定您的操作
【讨论】:
运行git pull 只是一次获取,然后是上游分支的合并。假设合并成功并且您仍然签出了这个分支,这样的事情应该可以解决它:
$ git reset @^1
这会将分支重置为第一个父分支,该分支应该是重新定位的分支(第二个父分支是分支的旧上游版本的头部。)您可以在重置之前进行验证:
$ git log --graph @^1
或
$ gitk @^1
如果这些看起来很正常,那么重置应该可以做到。它不会触及您工作树中的文件,因此您可以查看这是否导致任何令人惊讶的变化。我怀疑不会有,因为就代码而言,合并可能是无操作的(再次假设它成功了。)
【讨论】: