当前不在任何分支上+ git commit +在不在任何分支中时签出。我有没有放弃我的改变?

问题描述:

当我提交我的更改时,我当时并不在任何分支上。 我没有真正注意到这个消息,并检出了另一个分支。当前不在任何分支上+ git commit +在不在任何分支中时签出。我有没有放弃我的改变?

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

+0

你还有从您提交的控制台输出?它是否包含提交的SHA1?如果是这样,你有提交对象,这就是你所需要的一切 – rlc 2011-05-18 17:12:47

+3

我......不知道你可以*不*在分支中...... – 2011-05-18 17:13:00

+3

@Ignacio不在分支上的最常见情况是当你签出一个不属于分支的提交 – CharlesB 2011-05-18 17:19:58

您可以使用git reflog得到承诺的承诺,你做了,而在“无分支”(一个分离的头)和合并,在到您目前在(主也许)

分支哈希类似于git merge [email protected]{1}

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

+1

git樱桃选择{哈希}也似乎工作 – 2013-08-14 20:32:51

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

有关说明,请参见this answer

+2

这比在这种情况下更容易,因为reflog将具有提交 - [manojlds的答案](http://stackoverflow.com/questions/6048425/not-currently-on-any-branch-git-commit-checkout- when-not-in-any-branch-did-i/6048609#6048609)描述了这一点。 – 2011-05-18 18:42:12

+0

Upvoted他尊重 – CharlesB 2011-05-18 18:45:37

你永远不会“不在任何分支上”。您可能已经在名为master的分支上,但是当您提交时,您在分支上。所以那个提交是SOMEWHERE。

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

+12

这是错误的 - 你*不能*在分支上。这种状态称为“分离HEAD”,因为“HEAD”指向特定提交的散列而不是分支名称。您使用分离的HEAD进行的任何提交都不会推进分支提示,但仍可通过reflog访问一段时间。 – 2011-05-18 18:37:37

+0

不正确。现在“$ git status”给了我“#目前没有任何分支。” (而不是通常的“#分支大师”),然后是“#要承诺的变化:”等。 – weronika 2012-01-21 00:50:56

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

我是在一个类似的状态犯了一些工作后:

莉莉丝:经理KelSolaar $ git的状态

目前没有任何分支。

我发出了混帐登录看到我最后一次提交的哈希:

莉莉丝:经理KelSolaar $ git的日志

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

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

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

莉莉丝:经理KelSolaar $ git的结帐主

上一页头位是4998430 ......引入了新的“QObject的”组件categorie,并重新命名exising的人来“默认“和”QWidget“。

切换到分支 '主人'

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

莉莉丝:经理KelSolaar $ git的合并49984303037e970d637161

更新141bc69..4998430

快进

src/manager/component.py | 2 + -

...

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...)) $ 
+1

我认为这是最好的答案。另外值得一提的是,你可以使用'git branch'来检查你当前的分支。 – 2014-06-18 16:50:38

+0

这可以用最简单的解决方案来回答问题。 'git checkout -'(只是为了再次突出显示) – N8TRO 2015-05-20 15:19:00