如何在rebase之前检索旧的提交

问题描述 投票:0回答:2

比如说,我正在一个名为“最新”的分支上工作。完成任务后,我提交工作。当我将更改从“master”分支重新设置为“最新”分支时,在冲突解决过程中,我意外地接受了来自 master 的所有更改,结果,到最后,当重新设置完成时,我丢失了很多我的工作是在“最新”中完成的。

考虑到我在“最新”分支内进行了重新调整,我所做的工作的提交是否会被我接受的冲突解决方案覆盖?我以前的(原始)提交消失了吗?如果没有,我该如何取回它们。谢谢。

git branch rebase
2个回答
2
投票

您在

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>

0
投票

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 的位置,以便您可以轻松地将分支的尖端更改回运行它们之前的状态。

© www.soinside.com 2019 - 2024. All rights reserved.