【Git】分离头指针(detached HEAD)的注意事项和用途

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

分离头指针(detached HEAD)

在这里插入图片描述
通常,我们工作在某一个分支上,比如 master 分支。这个时候 master 指针和 HEAD 指针是一起前进的,每做一次提交,这两个指针就会一起向前挪一步。但是在某种情况下(例如 checkout 了某个具体的 commit),master 指针 和 HEAD 指针这种「绑定」的状态就被打破了,变成了分离头指针状态。

具体的情形引入Git分离头指针记录

当你修改代码之后,突然执行

git checkout <commit id>

执行完命令会有下面的提示,提示你在分离头指针状态,在这个状态下修改提交的代码不会提交到正常的分支

Note: checking out '952770d'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD 目前位于 952770d... git checkout first commit

分离头指针状态查看和返回
git status可以查看是否在头指针分离状态

头指针分离于 952770d
无文件要提交,干净的工作区

如果想回到分支正常状态,直接执行git checkout master (master为要回到的分支)

分离头指针下修改
如果在分离头指针状态下对文件做了修改,并执行了git add .和git commit进行了提交,git commit会得到下面的提示

[分离头指针 952770d] git checkout first commit
 1 file changed, 1 insertion(+)

952770d为在分离头指针下提交的commit id,这个commit id回到master head是看不到的,回到master 重新执行git checkout 952770d可找回自己的代码,执行git log时也可以看到log;

在分离头指针下当执行git checkout到其他分支时,会收到下面的警告,提示用户要新创建一个分支来保留做的修改

警告:您正丢下 1 个提交,未和任何分支关联:

  952770d git checkout first commit

如果您想要通过创建新分支保存它,这可能是一个好时候。
如下操作:

 git branch <新分支名> 952770d

这时候可以执行git branch <新分支名> 952770d创建一个新的分支,这个分支是基于头指针分离下修改提交的952770d创建的。


分离头指针也是有一定的好处的,当你在尝试的时候可以分离头指针,如果尝试有效就提交到原来的branch,如果无效就丢弃。

猜你喜欢

转载自blog.csdn.net/qq_42322103/article/details/95185844
今日推荐