相关文章推荐
乖乖的橡皮擦  ·  The virtual machine ...·  6 月前    · 
奔跑的大脸猫  ·  tony/RuoYi-flowableVue ...·  1 年前    · 
紧张的绿豆  ·  Python ...·  1 年前    · 
霸气的书签  ·  C++ OpenSSL 1.0 ...·  1 年前    · 

什么是 HEAD

Git 中的 HEAD 可以理解为一个指针,我们可以在命令行中输入 cat .git/HEAD 查看当前 HEAD 指向哪儿,一般它指向当前工作目录所在分支的最新提交。

当使用 git checkout < branch_name> 切换分支时,HEAD 会移动到指定分支。

但是如果使用的是 git checkout < commit id> ,即切换到指定的某一次提交,HEAD 就会处于 detached 状态(游离状态)。

HEAD 游离状态的利与弊

HEAD 处于游离状态时,我们可以很方便地在历史版本之间互相切换,比如需要回到某次提交,直接 checkout 对应的 commit id 或者 tag 名即可。

它的弊端就是: 在这个基础上的提交会新开一个匿名分支!

也就是说我们的提交是无法可见保存的,一旦切到别的分支,游离状态以后的提交就不可追溯了。

解决办法就是新建一个分支保存游离状态后的提交:

具体解决操作

  1. git branch -v 查看当前领先多少
    • 这里写图片描述
    • 4449a91 指向的是 dev1 的最后一次提交
  2. 新建一个 temp 分支,把当前提交的代码放到整个分支
    • 这里写图片描述
  3. checkout 出要回到的那个分支,这里是 dev1
    • 这里写图片描述
  4. 然后 merge 刚才创建的临时分支,把那些代码拿回来
    • 这里写图片描述
  5. git status 查看下合并结果,有冲突就解决
    • 这里写图片描述
  6. 合并 OK 后就提交到远端
    • 这里写图片描述
  7. 删除刚才创建的临时分支

    • 这里写图片描述
  8. 查看 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>` 命令来切换回分支。 好像不错。我之前遇到过,然后不知道怎么办,就[code=plain] 首先:git reset --soft head^ 然后:git stash: 将本地修改stash,回到第一条指令时的状态 [/code] 怎么判断一个序列是不是堆? 哈哈朋友你是谁 表情包 怎么判断一个序列是不是堆? NingQier: 拭心又在思考了我的天 Java 集合深入理解(6):AbstractList 代码小白啦: 在API31中已经把iterator()方法放到ArrayList中实现了