回答
“目前不在任何分支上”意味着您有一个detachedhead,即您的HEAD指针直接引用提交而不是象征性地指向分支的名称。
您可以通过签出SHA1提交,或者当您处于rebase中间或合并失败时进入此情况。很难说你可能为了偶然发现这种情况而做了什么。
据说,当您从分离的HEAD切换到某个分支时,您可能会失去更改,但reflog将始终跟踪HEAD移动的位置。事实上,当从一个分离的HEAD切换时,Git 1.7.5会警告你。 确实失去工作的唯一时间是当您有未提交的更改时,您可能想提交或存储。
一个简单的方法来看看发生了什么是git reflog
或git log -g --decorate
一个更详细的清单。 --decorate
选项将使用指向它的所有分支的名称标记每个SHA1。如果您当前HEAD的SHA1与主人的完全相同,那么您不必做任何事情,只需要git checkout master
就可以回到正轨。否则,请查看其他分支是否指向SHA1。如果没有,你可能希望创建一个分支来挂靠它。
另一个好的命令是git branch -av
,它将同样列出所有分支和他们指向的内容,所以你可以看到你的(no branch)
真的应该是什么。
很难说没有更多的细节。
git pull
从远程存储库中提取更改,然后进行合并。它可以配置为进行重新分配而不是合并(通过执行git pull --rebase
,或者通过为您要分支的分支配置一个真实值branch.<branch_name>.rebase
)。
如果你是从一个分支开始的,任何合并类型的pull都会让你留在那个分支上。另一方面,rebase命令总是通过使用临时分离的HEAD(又名“no分支”)来工作。如果您在重新绑定类型拉的过程中处于此状态,那是因为拉动的重新绑定部分发生冲突,并且正在等待您解决它们并使用rebase --continue
(或--skip
或--skip
或--abort
)。
默认情况下,reflog存储对HEAD所做的每个更新(每个分支也可以有一个更新)。您可以使用git reflog show
(或更多详细视图,请参阅git log -g
)查看推荐日志。它可以帮助你确定你进入这个状态的方式。
如果你处于rebase(你有一个.git/rebase-apply
目录)的中间,那么它可能会停下来让你解决一些冲突。使用git status
检查“未合并”条目。任何这样的条目都应该在文件中嵌入冲突标记(假设它们是纯文本文件)。您应该编辑它们以解决冲突,并通过在其上运行git add
将它们标记为合并。然后运行git rebase --continue
继续进行rebase。您可能遇到更多应以类似方式处理的冲突(编辑,添加,继续)。如果您决定不再需要特定提交,则可以使用git rebase --skip
跳过它。您可以用git rebase --abort
中止整个rebase。所有这些rebase命令都会在由于任何冲突而停止资产时出现在错误消息中。一旦所有挂起的提交已经被应用(或跳过),你的原始分支将被更新为最终的新提交并且你的HEAD将被重新附加到它(如果你中止,你的HEAD将被重新挂接而不更新分支)。
如果你脱离的HEAD不是由于在rebase中间发生的冲突造成的,那么你的HEAD在拉动之前的某个点被分离。您将需要评估树的当前状态,以决定要执行的操作。您可以使用git show-branch --current --all
或git log --graph --oneline --decorate --all
或图形工具如gitk
来了解当前(分离)HEAD与您其他分支的关系。如果您决定要保留头部的内容,那么您可以使用git branch new_branch_name
为他们创建一个新分支。如果您想覆盖现有分支,请使用git branch --force existing_branch_name
。然后使用git checkout branch_name
将您的存储库的HEAD重新附加到分支。
提示'.git/rebase-apply'是一条线索。 – millhouse 2013-07-24 23:52:09
注意的是,在“git pull --rebase
”运行,而HEAD
被分离的情况下,GIT中试图找到分离HEAD
(其通过定义不存在),并发出不必要的错误消息的上游分支。
这不再是Git1.8.0.1(2012年11月26日)的情况下
- 1. 为什么在git获取后没有看到git分支?
- 2. 为什么git-svn clone将'master'设置为随机分支?
- 3. git分支(没有分支)
- 4. 设置git分支
- 5. 为什么我的cookies没有设置?
- 6. 为什么我的cookie没有设置?
- 7. 为什么我的UITableView没有设置?
- 8. git指出分支之后没有合并 - 为什么?
- 9. 为什么PS1没有使用git分支名称更新?
- 10. 为什么会的Git合并设置我的svn网址分支
- 11. 为什么我们需要设置SONAR_RUNNER_OPTS?
- 12. 为什么我们设置属性Hibernate.Dialect?
- 13. 有什么办法可以将Git分支设置为只读存储?
- 14. 将远程分支设置为我们本地没有提交的提交
- 15. 为单个分支设置Git
- 16. 为什么git fetch没有获取我的远程分支参考
- 17. 我刚在什么git分支?
- 18. 为什么我们没有HTML 3
- 19. 我想将我当前的Git分支重置为主分支
- 20. 什么分支git svn rebase?
- 21. Git显示没有分支
- 22. 为什么我不能将我的QDialog设置为没有sizeGrip?
- 23. 如何将git分支设置为另一分支的状态
- 24. 为什么我们使用Git Keys
- 25. 为什么git没有'git ignore'命令?
- 26. 为什么git分支图不能正确地跟踪分支?
- 27. 为什么应用到主分支虽然我没有合并
- 28. 为什么'git rebase'保留重新设计的分支历史?
- 29. Git分支模型,开发分支有什么好处?
- 30. 为什么git命令切换名为“git checkout”的分支?
+1 for git reflog。这让我感到困惑。 – kakyo 2013-03-18 21:09:09