detached head是一种HEAD指针指向了某一个具体的 commit id,而不是分支的情况。在这个状态下进行的commit不会对你的远程分支产生影响。先看看detached head状态下是什么情况:
1.从远程库clone下来一个远程的repository:
2. clone下来之后,git自动在本地建立了一个本地分支master,并自动与远程库master关联。此时指针指向的是一个master副本的本地分支。这个分支的内容和远程库master一致,代表你本机本地的副本。红色部分为远程分支。你在本地的分支操作(add,commit),然后push到远程的master中进行更新,远程master的更新也通过pull 与你本地的合并,以此来保持同步。
3.现在checkout到Campus_MD分支。因为本地的工作区目前是master分支的代码,checkout一下就会出现detached head的状态。在之前clone下来时,本地系统自动帮你创建了一个本地master分支与远程master关联。但是此次直接checkout Campus_MD分支时,本机上没有本地分支与之关联,就出现了detached head的情况(直接指向了commit id),所以据此猜测,应该有checkout的参数,使在checkout切换到远程分支时,自动创建一个本地分支与之对应。
就这个理解的话,那么此时只需手动在本地新建一个分支与你想要工作的分支进行关联,就会在你的工作区正常的出现 目录【分支名 ~0 ~0 ~0】这样的正常提示了。
你看,git也是这么提示的
。因为你checkout的是一个远程分支而不是本地的(因为git是一个离线的版本控制系统嘛),git只能给你一个commit id让你进行操作。这时候想正常操作,git就提示你 在此commit id的基础上新建一个分支并 与之关联(set-upstream)。就行了。
以前懵懂时候的操作,没有遇到detached head。clone下来之后,直接git checkout branchName ,系统就自动创建了一个新的分支,当时以为这就切换到了对应的远程分支上工作。虽然操作是正确的,但是一直没有明白其中的道理,以至于在checkout一个 origin/branchName的时候 遇到detached head就不知所措了。
好了,这算是最近遇到的一个git问题了,它并不是一个新问题,只是当初学习的时候一知半解留下的技术债务。