设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

git寻根——^和~的区别

2013-5-16 11:23| 发布者: 红黑魂| 查看: 3206| 评论: 0|来自: 博客园

摘要: 一. 引子   在git操作中,我们可以使用checkout命令检出某个状态下文件,也可以使用reset命令重置到某个状态,这里所说的“某个状态”其实对应的就是一个提交(commit).我们可以把一个git仓库想象成一棵树,每个com ...

reset与checkou的区别

在master分支上,当前提交为3b03,使用git reset –hard HEAD^,将master重置到HEAD的父提交;该命令也可以写成git reset –hard HEAD^1

$ git reset --hard HEAD^
HEAD is now at 4927c6c c3

对应的图如下所示:


这时候,HEAD还是指向master分支,但是master引用的commit值已经变成了4927,即3b03的第一个父提交的ID.

然后,我们再重置到”c8”的commit”3b03”,git reset –hard 3b03,然后使用命令git checkout HEAD~ ,git 操作如下:

$ git reset --hard 3b03
HEAD is now at 3b0370b Merge branches 'br1', 'br2' and 'br3'
$ git checkout HEAD~
HEAD is now at 4927c6c... c3

对应的图如下所示:

这时候,HEAD指向了commit 4927,即3b03的第一个父提交ID,但是master引用还是对应的3b03.

从上面的测试,我们可以得出以下结论:

  1. HEAD^,HEAD^1和HEAD~三个表达式都是代表了HEAD的父提交
  2. reset 的时候,HEAD不变,但是HEAD指向的引用值会变成相应的值;checkout 的时候,HEAD直接变成值,但原来引用中保存的值不变。

^n和~n的区别

(|HEAD)^n,指的是HEAD的第n个父提交(HEAD有多个父提交的情况下),如果HEAD有N个父提交,那么n取值为n < = N.

(|HEAD)~n,指的是HEAD的第n个祖先提交,用一个等式来说明就是:(|HEAD)~n = (|HEAD)^^^….(^的个数为n).我们通过例子来验证一下吧。

我们沿用上面演示用的仓库,先检出到master分支,再使用git checkout HEAD^2,看看我们检出了哪个commit

$ git checkout master
$ git checkout HEAD^2
HEAD is now at 063f6e6... c5

我们发现”c5”对应的commit值063f正是3b03第二个父提交的commit 对应的图如下所示:

现在再切回master分支,git checkout master

然后使用git checkout HEAD^3,那么按照规律,就应该检出3b03的第三个父提交的commit,即”c7”的commit值4f9c.

$ git checkout master
Previous HEAD position was 063f6e6... c5
Switched to branch 'master'
$ git checkout HEAD^3
HEAD is now at 4f9ca79... c7

对应的图如下所示:

果然没错,一切都在我们的预料之中!

现在验证下HEAD~的用法,切换到master分支,然后git checkout HEAD~2

$ git checkout master
$ git checkout HEAD~2
HEAD is now at 1c7383c... c2

这时候HEAD悄然来到了”c2”的commit 1c73,因此,HEAD~2 相当于HEAD的第一个父提交的第一个父提交。即HEAD~2 = HEAD^^ = HEAD^1^1, 符合预期!好开心的哟!

五.总结

  1. “^”代表父提交,当一个提交有多个父提交时,可以通过在”^”后面跟上一个数字,表示第几个父提交,”^”相当于”^1”.
  2. ~相当于连续的个”^”.
  3. checkout只会移动HEAD指针,reset会改变HEAD的引用值。

现在看到^和~两个符号,再也不会彷徨和害怕了,因为我们知道了它们之间的关系及区别,从此我们过上了幸福的生活。


酷毙
2

雷人

鲜花

鸡蛋

漂亮

刚表态过的朋友 (2 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部