我们的团队最近从 svn 和 hg 迁移到了 git。因此,当他们检查树的尖端时,根据 GUI,他们倾向于检查特定的提交或本地分支而不是新的跟踪分支,而不了解 git 的真正工作原理。
所以我的问题是为什么分离式 HEAD 甚至存在?
为什么不能默认总是 checkout 一个新分支? (我对git的了解有限)
教育/培训肯定有帮助,但总有新手接触 git...
你们是怎么处理的?
顺便说一句,我知道如何修复它们。我已经阅读了该网站上的很多帖子。
这更多是为了知识共享以及您如何预防或管理。
更新:
在阅读了下面提供的详细解释之后,我现在意识到我的问题应该是“为什么 git 在 check out 一个新的远程分支时会给出一个分离的 HEAD?”。无论如何,答案会给你一个很好的理解!
最佳答案
[...] why does detached HEAD even exist? Why can't it be defaulted to always checking out a new branch?
让我试试下面的比喻。如果您将 Git 存储库视为记录存储库历史的相册...
- 您可以将分支视为书签;它们标记了您历史上的兴趣点,您可能会在某个阶段返回的快照……如果只是出于怀旧的话:)
- 您可以将
HEAD
引用想象成您的一根手指,让书在特定页面打开。
现在,想象一下,如果您只能在已经有书签的地方打开这本书。这将是非常有限制和笨拙的:你将不得不创建和使用许多书签只是为了访问你的历史的某些页面:
相反,Git 允许您快速浏览本书并在您喜欢的任何页面上打开它。然后,如果您注意到您感兴趣的特定快照,您可以随时为它创建一个新书签(分支)。
简而言之,这就是分离 HEAD 状态有用的原因。它允许您检查任何提交,即使是当前没有分支指向的提交。如果您决定要将全新的工作基于有问题的提交,那么创建一个指向该提交的新分支是有意义的;但是,否则,创建一个新分支就太过分了。
Why does git give a detached HEAD when checking out a new remote branch?
我猜你可能跑了
git checkout <remote-branch>
并且惊讶于它分离了 HEAD
。你需要知道 Git 区分
- 远程跟踪分支,它们在您的存储库本地,但仅用于反射(reflect)远程存储库中的分支在您上次与服务器通信时的样子;您不能在此类分支机构工作;和
- (纯)本地分支机构,可以继续工作。
如果你只是运行
git checkout <remote-branch>
不会创建供您使用的本地分支,您最终将处于分离的HEAD
状态。你可能想跑
git checkout -b <new-local-branch> <remote-branch>
相反。这将创建并 checkout 一个新的本地分支,该分支指向与远程分支相同的提交。然后没有分离的HEAD
。
关于git - 为什么 git detached HEAD 甚至存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26051216/