比如说,我正在一个名为“最新”的分支上工作。完成任务后,我提交工作。当我将更改从“master”分支重新设置为“最新”分支时,在冲突解决过程中,我意外地接受了来自 master 的所有更改,结果,到最后,当重新设置完成时,我丢失了很多我的工作是在“最新”中完成的。
考虑到我在“最新”分支内进行了重新调整,我所做的工作的提交是否会被我接受的冲突解决方案覆盖?我以前的(原始)提交消失了吗?如果没有,我该如何取回它们。谢谢。
您在
latest
分支中所做的原始提交仍然可以在 git reflog 中访问。 当前的 latest
分支现在有了新的、重写的提交。 您可以尝试筛选引用日志,但最快的方法可能是将 latest
硬重置到远程跟踪分支 origin/latest
:
# from latest
git reset --hard origin/latest
此选项假设,在您进行相关提交后,您已推送到远程,从而更新(本地)跟踪分支
origin/latest
。 如果是这样,跟踪分支应该仍然与变基之前相同。
如果您在提交后没有推送本地分支,那么引用日志可能仍然可以帮助您。 输入
git reflog
。 然后,找到在拙劣的变基之前作为分支 HEAD 的提交。 您可以使用提交消息来帮助您。 获得该提交的 SHA-1 后,再次进行硬重置:
# from latest
git reset --hard <SHA-1 of your old HEAD>
Git 将 HEAD 存储在一个名称中
ORIG_HEAD
,然后“以剧烈的方式”修改它。
因此,它将恢复您要执行的工作
git reset --hard ORIG_HEAD
这对于差异检查变基对工作树的影响也很有用
git diff ORIG_HEAD HEAD
另请参阅 gitrevisions - 指定 Git 的修订版和范围
ORIG_HEAD
由以剧烈方式移动 HEAD 的命令(git am、git merge、git rebase、git reset)创建,在操作之前记录 HEAD 的位置,以便您可以轻松地将分支的尖端更改回运行它们之前的状态。