Git 如何在签出以前的提交后返回到最近的提交?(分支名称未知时。)

Git 如何在签出以前的提交后返回到最近的提交?(分支名称未知时。),git,Git,在发现新提交中某个地方发生的错误之前,我进行了几次提交。为了查明是哪个提交引入了错误,我检查了几个不同的提交并手动测试了每个提交。我现在准备签出最新的提交并进行修复。但是,我无法运行git checkout-,因为我签出了多个sha。我记不起分支机构的名字了。(我有几个名称相似的分支。)我也不想使用cherry pick,因为bug中必须保留代码更改 在签出多个以前的提交后,如何在不知道分支名称的情况下签出最后一次提交?可能尝试说 $ git switch - 如果这不起作用,您可以使用git

在发现新提交中某个地方发生的错误之前,我进行了几次提交。为了查明是哪个提交引入了错误,我检查了几个不同的提交并手动测试了每个提交。我现在准备签出最新的提交并进行修复。但是,我无法运行
git checkout-
,因为我签出了多个sha。我记不起分支机构的名字了。(我有几个名称相似的分支。)我也不想使用cherry pick,因为bug中必须保留代码更改

在签出多个以前的提交后,如何在不知道分支名称的情况下签出最后一次提交?

可能尝试说

$ git switch -
如果这不起作用,您可以使用
git reflog
查看您最近在做什么。这可能会告诉您,在开始将SHA的单个提交签出到“分离头”模式之前,您一直在处理哪个分支

例如:

$ git log --all --oneline --graph
* e97f1b8 (HEAD -> b2) commit5
* 2483507 commit4
| * 51bcef6 (b1) commit3
| * 24cf012 commit2
|/  
* 0a93483 (master) initial

$ git checkout 2483
Note: switching to '2483'.You are in 'detached HEAD' state...

$ git reflog
2483507 (HEAD) HEAD@{0}: checkout: moving from b2 to 2483
e97f1b8 (b2) HEAD@{1}: commit: commit5
…从中我们可以看到,在签出2483之前,我在
b2

下次遇到这种情况时,请使用
git bisect
。这就是它的目的。有了它,Git将签出每个提交以进行测试,并记住测试开始前的位置。

试试$Git reflog


git reflog-Manage reflog information

如果您已通过其SHA签出提交,并且当前处于“分离头”模式,那么“当前分支上的最新提交”是什么意思?你不是在树枝上。您处于分离头部模式。我想我知道你这是什么意思,但最好弄清楚。谢谢你提出这个澄清的问题。我一直认为“detached head”意味着git不仅指向以前的提交,而且还跟踪在进入detached head模式之前您之前所在的分支。看来我的假设是错误的,git在签出旧提交之前知道您的最后一个工作分支。