git 检出

git checkout 检出

在git reset的用法中,我们了解到,git reset 主要是对用“游标”(也可以理解成我们具体的分支名)的改动,而HEAD指向并没有改变。而git checkout命令则是改变 HEAD 的指向。

git checkout commit-id 实现“分离头指针”

xing@ubuntu-15-121:~/work/GitTest/HelloWorld$ git rev-parse HEAD master
3de57a56ac0c2721d568538a6c728b546b8cf442
3de57a56ac0c2721d568538a6c728b546b8cf442

上面是我们打印出的HEAD 和master 指向的 commit-id,可以看到 HEAD 和 master指向的 commit-id是一样的。这很容易理解,打印出 HEAD 的内容就知道了。

xing@ubuntu-15-121:~/work/GitTest/HelloWorld$ cat .git/HEAD 
ref: refs/heads/master

HEAD是指向master的,如果我们此时进行这样的操作,运行以下的命令 git checkout 3de57,此时会打印出以下的log.

xing@ubuntu-15-121:~/work/GitTest/HelloWorld$ git checkout 3de57
M       1
Note: checking out '3de57'.

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 is now at 3de57a5... add third line

我们再cat出HEAD文件的内容,可以看到:

xing@ubuntu-15-121:~/work/GitTest/HelloWorld$ cat .git/HEAD
3de57a56ac0c2721d568538a6c728b546b8cf442

这个时候HEAD的内容改变了,虽然指向的仍然是master的那个commit-id,但是和master已经没什么关系。此时的状态就是”detached HEAD” state,也就是所说的”分离头指针”。

想象一下,我们在一个分支上开发功能,如果我们想回到之前的某个修改点并且试验一下新的功能,则可以使用 git checkout <commit-id>回到指定的修改点,然后再使用git checkout -b new_branch创建一个新的分支,再在这个分支上开发试验的功能。当然也可以使用git stash命令,这个以后再研究,或者通过下面的checkout的方法。

需要注意的是“分离头指针”状态下的提交在我们切换分支后还是会存在于版本库中,但是并不能保证这个提交会永久存在。当reflog中含有该提交的日志过期后,这个提交随时都会从版本库中彻底消除。

使用git merge 将“分离头指针”模式下的修改合并到指定分支

  • 首先使用git checkout <指定分支>切换到要合并到的分支
  • 再使用git merge commit-id将指定的commit-id合并到当前的分支

git checkout 命令的三种用法

  • git checkout [-q] [<commit>] [ – ] <paths>…

    这种用法不会改变HEAD的头指针,commit为可选项,如果省略则相当于从暂存区进行检出,重置(reset)的默认值是 HEAD,而检出的默认值是暂存区。– 是为了避免路径和引用同名而发生冲突。

  • git checkout []

    会改变HEAD的头指针

  • git checkout [-m] [ [-b] –orphan <new_branch> ] [<start_point>]

    这种用法主要是创建和切换到新的分支,新的分支从指定的提交开始创建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值