什么是 HEAD
Git 中的 HEAD 可以理解为一个指针,我们可以在命令行中输入
cat .git/HEAD
查看当前 HEAD 指向哪儿,一般它指向当前工作目录所在分支的最新提交。
当使用
git checkout < branch_name>
切换分支时,HEAD 会移动到指定分支。
但是如果使用的是
git checkout < commit id>
,即切换到指定的某一次提交,HEAD 就会处于 detached 状态(游离状态)。
HEAD 游离状态的利与弊
HEAD 处于游离状态时,我们可以很方便地在历史版本之间互相切换,比如需要回到某次提交,直接 checkout 对应的 commit id 或者 tag 名即可。
它的弊端就是:
在这个基础上的提交会新开一个匿名分支!
也就是说我们的提交是无法可见保存的,一旦切到别的分支,游离状态以后的提交就不可追溯了。
解决办法就是新建一个分支保存游离状态后的提交:
具体解决操作
-
git branch -v 查看当前领先多少
-
-
4449a91 指向的是
dev1
的最后一次提交
-
新建一个 temp 分支,把当前提交的代码放到整个分支
-
checkout
出要回到的那个分支,这里是
dev1
-
然后
merge
刚才创建的临时分支,把那些代码拿回来
-
git status
查看下合并结果,有冲突就解决
-
合并 OK 后就提交到远端
-
删除刚才创建的临时分支
-
查看 Log,当前 HEAD 指向本地 dev1 ,和远端 dev1 一致,OK 了!
Thanks
https://marklodato.github.io/visual-git-guide/index-zh-cn.html#detached
https://git-scm.com/docs/git-checkout#_detached_head
欢迎扫描关注我的微信公众号,不定时更新我的成长及思考文章~
本文 Git 图片主要来自:图解 Git,非常感谢!读完本文你将了解:什么是 HEADHEAD 游离状态的利与弊具体解决操作Thanks什么是 HEADGit 中的 HEAD 可以理解为一个指针,我们可以在命令行中输入 cat .git/HEAD 查看当前 HEAD 指向哪儿,一般它指向当前工作目录所在分支的最新提交。当使用 git checkout 切换
git
中的
HEAD
处于
游离
状态
那么
HEAD
又是什么呢?
git
中的
HEAD
可以理解为一个指针,一般它指向当前工作目录所在分支的最新提交。切换分支时
HEAD
会移动到指定分支,但是当切换到某一个commit时,
HEAD
则会处于
游离
状态。
解决方法:
基于本次提交创建一个临时分支
git
checkout -b temp <commit-id>
切换到工作分支
git
checkout <commit-name>
然后merge到我当前工作分支g
detached
head
是一种
HEAD
指针指向了某一个具体的 commit id,而不是分支的情况。在这个状态下进行的commit不会对你的远程分支产生影响。先看看
detached
head
状态下是什么情况:
1.从远程库clone下来一个远程的repository:
2. clone下来之后,
git
自动在本地建立了一个本地分支master,并自动与远程库master关联。此时指
cat .
git
/
HEAD
ref: refs/
head
s/<branch name> // 正常
cad0be9ceb89f474c39360c4de337d4a8194cab0 //
游离
状态
使用
git
...
在使用
git
的过程中,若使用
git
checkout < commit id>,那么,会进入
游离
状态,出现标题所示的提示,表示当前没有任何分支进行管理,
git
后台会生成一个匿名分支,但是匿名分支有一个问题,就是无法保存追溯,切到其他分支后就等于丢失了
解决办法
:
1.在进入
游离
状态后创建一个新分支
2.切入新分支
3. 此时
游离
状态就处在了这个新分支上
参考:https://blog.csdn.net/u011240877/article/details/76273335
查看分支,不是我常用的分支,而是
游离
分支,找回代码的方法:
git
reflog 找到需要恢复的commit ,记下前面的commit id
git
branch temp 23e15ab 新建一个名字叫temp的分支,用这个分支代替之前的临时分支并且拥有想要恢复的commit,23e15ab为要恢复的commit id
git
checkout
1.
git
push origin master后出现
Everything up-to-date
当时以为问题自己点错了,又重新提交了一次,在
git
commit之后出现
HEAD
detached
from 4d1722c错误
立即用
git
status查看,也是这样的内容,当时网上了教程很不清晰,自己还
git
checkout master,导...
这是
游离
分支,通常由于
git
checkout
HEAD
而不是
git
checkout [branch] 造成.不属于任何分支,所以在进行push等分支操作时会有错误.
怎么解决?
把最新文件复制出来,然后checkout需要的分支,
然后粘贴覆盖即可.
有可能文件时间不同,但
git
针对的内容.和时间没有关系
项目代码开发过程已经离不开版本控制工具,
git
作为一款被广泛使用的分布式版本控制系统,大家已经非常熟悉。我们在项目中使用
git
进行自动化测试代码管理和维护,随着自动化测试代码提交的人数增加,越来越多的问题也随之暴露出来,今天想要跟大家分享的是关于
git
代码合并的冲突问题。
最初自动化代码是有一个人搭建起来,后来有3个测试同事加入编写测试代码,最先遇到的问题就是多人之间的协同问题,简单的
git
pull和
git
push变得不听话起来,每次一提交代码就有代码冲突出现。下面看看我是
detached
HEAD
状态是指
HEAD
指针不指在任何分支的索引(比如 master、dev)。
进入
detached
HEAD
状态后
git
会创建一个临时分支。
如果想退回直接
git
checkout 想要的分支。
否则操作后,要
git
add、
git
commit 然后
git
checkout -b 新的分支,不然临时分...
在
Git
中,
detached
head
状态是指你的当前的
HEAD
指针指向的不是一个分支,而是一个单独的提交。这通常是因为你切换到了某个提交的历史记录上,或者是因为你在分支上 cherry-pick 了一个提交。
例如,当你使用 `
git
checkout <commit>` 命令时,你就会进入
detached
head
状态。这是因为这个命令会将
HEAD
指针直接移动到给定的提交上,而不是切换到一个分支上。如果你在
detached
head
状态下做出了提交,那么你的新提交将不属于任何分支,并且你可能很难找到它。
通常来说,你应该避免进入
detached
head
状态,除非你确实知道自己在做什么。如果你不小心进入了
detached
head
状态,可以使用 `
git
branch <new-branch-name>` 命令来创建一个新分支,然后使用 `
git
checkout <new-branch-name>` 命令来切换回分支。
怎么判断一个序列是不是堆?
怎么判断一个序列是不是堆?
NingQier:
Java 集合深入理解(6):AbstractList
代码小白啦: