git checkout 命令的作用,以及错误使用git checkout 导致HEAD分离情况的处理

git checkout 命令的作用,以及错误使用git checkout 导致HEAD分离情况的处理

切换分支

在提交层面的git checkout 非常简单,当传入分支名的时候,就可以切换到那个分支

比如:

 git checkout dev
 

上面这个命令做的不过是将HEAD移到一个新的分支,然后更新工作目录。因为这可能会覆盖本地的修改,Git强制你提交或者缓存工作目录中的所有更改,不然在checkout的时候这些更改都会丢失。


image
image

切换到任意提交

 commit 9fa9c5fb42053d97276ac50c1935d61c0e19ebdc
Author: fanyu1986 <18396605592@163.com>
Date:   Fri Feb 17 15:15:37 2017 +0800

    add style of account message


其中 9fa9c5fb42053d97276ac50c1935d61c0e19ebdc 即为提交的HEAD

使用git checkout 9fa9c5fb42053d97276ac50c1935d61c0e19ebdc 就可以将HEAD移动到这个提交

比如如果想返会当前HEAD前两次的提交 可以使用

git checkout HEAD~2

image
image

HEAD分离

这对于快速查看项目旧版本来说非常有用。但如果你当前的HEAD没有任何分支引用(我现在理解是没有一个分支的最后一次提交的HEAD和当前HEAD一样),那么这会造成HEAD分离。

头指针分离于 9fa9c5f

这是非常危险的,如果你接着添加新的提交,

[分离头指针 a1444ee] 测试HEAD分离
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test_head.php

然后切换到别的分支之时git会提醒你

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

  9fa9c5f commit message 分离

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

 git branch <新分支名> 9fa9c5f

切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。

如果使用 git branch <新分支名> 9fa9c5f 会创建一个新的分支来保存本次提交,如果没有建分支的话,HEAD分离提交后的内容就会永远消失。

本文参考

5.2 代码回滚:Reset、Checkout、Revert的选择

危险!分离头指针

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,770评论 1 17
  • 一直很庆幸,坚持成为一个善良的人。 影响我的,不过是几件小事。 1.大概4、5岁的时候,我被小姨带去她工作的地方玩...
    420_c644阅读 190评论 0 0
  • 莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕? 一蓑烟雨任平生。 料峭春风吹酒醒,微冷,山头斜照却相迎。回...
    钟离凌羽阅读 226评论 4 1
  • 说一说“雏菊”吧。 不要试图用纯情打动我,虽然我会为它付出眼泪。 但是他羞怯英俊,上唇略短,眼神试探游移,他的生命...
    Jolie_K阅读 289评论 0 0