题 当不在任何分支时,当前不在任何分支+ git commit + checkout上。我放松了改变吗?


当我提交更改时,我当前不在任何分支上。 我没有真正注意到该消息,并检查了另一个分支。

如何检索我的更改? 我无法合并或结帐,因为没有要合并的分支。


35
2018-05-18 17:09


起源


你提交的时候还有控制台输出吗?它包含提交的SHA1吗?如果是这样,您就拥有了commit对象,这就是您所需要的 - rlc
我...不知道你永远都不会 不 在一个分支...... - Ignacio Vazquez-Abrams
@Ignacio最常见的不在分支上的情况是当你签出提交时它不属于分支的尖端 - CharlesB
@Ignacio:它非常实用!您可以在历史记录中提交,而无需移动任何分支提示 - 特别有用,例如,当试图找到一个好的提交时 git bisect。 “分离的HEAD”是此状态的名称,因为HEAD直接指向提交而不是通过特定的ref间接指向一个提交。 - Mark Longair


答案:


您可以使用 git reflog 获取您在“无分支”(分离的HEAD)中执行的提交的提交哈希值,并将其合并到您当前所在的分支中(可能是master)

就像是 git merge HEAD@{1}

你也可以 git rebase -i 并从reflog中“选择”您想要的提交。


68
2018-05-18 17:24



git cherry-pick {hash}似乎也有效 - Adam Loving


在做了一些工作之后,我处于类似的状态:

Lilith:经理KelSolaar $ git status

目前不在任何分支机构。

我发了一个 git日志 看到我上一次提交哈希:

Lilith:经理KelSolaar $ git log

提交49984303037e970d637161c3154b7fd7d6ae3a43   作者:KelSolaar   日期:2011年10月5日星期三22:41:31 +0100

Introduce new "QObject" components category and rename existing ones to "Def

然后我检查了我的主分支:

Lilith:经理KelSolaar $ git checkout master

之前的HEAD位置是4998430 ...引入新的“QObject”组件类别,并将现有的组件重命名为“Default”和“QWidget”。

切换到分支'主'

我最终使用提交哈希合并:

Lilith:经理KelSolaar $ git merge 49984303037e970d637161

正在更新141bc69..4998430

快进

src / manager / component.py | 2 + -

...


11
2017-10-05 22:00





git checkout - 会把你切换回上一个分支:

Thu Feb 21 12:50 AM /src/test ((08f84f4...)) $ git checkout master

Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  08f84f4 Fix everything

Switched to branch 'master'

Thu Feb 21 12:50 AM /src/test (master) $ git checkout -

HEAD is now at 08f84f4... Fix everything

Thu Feb 21 12:50 AM /src/test ((08f84f4...)) $

9
2018-02-21 08:52



我认为这是最好的答案。另外值得一提的是,您可以使用检查当前分支 git branch - Adam F
这用最简单的解决方案回答了这个问题。 git checkout - (只是再次突出显示) - N8TRO


你的提交没有消失,你可以通过要求git向你显示隐藏的提交来恢复,并将它们放回临时分支中。

看到 这个答案 作为指示。


2
2018-05-18 17:12



这比在这种情况下更容易,因为reflog将具有提交 - manojlds的回答 描述了那个。 - Mark Longair
尊敬地支持他 - CharlesB


使用“git reflog”它会显示git命令历史记录结果的提交哈希值。 然后你可以“git co hash”,当你找到合适的那个时,设置/为它做一个分支。


1
2018-05-19 06:04





你永远不会“不在任何一个分支上”。你可能一直在叫做分支 master,但是当你提交时你就在一个分支上。所以提交是SOMEWHERE。

使用 git log 看历史。您可以使用 git reset 及时返回(包括,可选地,在工作目录中保留更改)。


-5
2018-05-18 17:22



这是错的 - 你 能够 不在分支机构。这种状态被称为“分离的HEAD”,因为 HEAD 指向特定提交的哈希而不是分支名称。您使用分离的HEAD进行的任何提交都不会推进分支提示,但仍可通过reflog访问一段时间。 - Mark Longair
不对。现在“$ git status”给了我“#目前不在任何分支上。” (而不是通常的“#On branch master”),然后是“#要提交的更改:”等。 - weronika