##说明
本篇文章是对Pro Git 7.1 Git 工具 - 选择修订版本 章节中 祖先引用 的总结。
##git命令中HEAD^和HEAD~区别。
- HEAD+数字表示当前提交的父提交。具体是第几个父提交共同过+数字指定,EAD^1第一个父提交,该语法只能用于合并(merge)的提交记录,因为一个通过合并产生的commit对象才有多个父提交。
- HEAD~(等同于HEAD^,注意没有加数字)表当前提交的上一个提交。
使用场景:如果想获取一个提交的第几个父提交使用HEAD+数字,想获取一个提交的上几个提交使用HEAD~。HEAD和HEAD或HEAD^^和HEAD并没有区别,只有HEAD^+数字才和HEAD有区别。
我们现在有个一个master分支,我们通过在master分支执行这两个命令了来了解一下他们之间的区别,当前master分支提交记录如下:
Administrator@USER-20171018VX MINGW64 /d/branch-test (master)
$ git log --oneline --graph
* ae64286 (HEAD -> master) Merge branch 'iss11'
|\
| * 34af7c6 (iss11) 添加 run()
* | 247c954 添加 testRun()
|/
* 79779c7 添加 main()
* d44c096 Merge branch 'dev' 将dev分支内容合并到master分支
|\
| * 89a6a5a (dev) 介绍你可以向文件写入什么内容
* | bd61a96 添加介绍说明
|/
* 01833f9 添加文件类型说明
* 5f19dbf 新建文件a.txt和b.txt
##1,HEAD^
###1.1,最新一次提交的第一个父提交。
Administrator@USER-20171018VX MINGW64 /d/branch-test (master)
$ git show HEAD^1
commit 247c954617cdcb457ced546bb7244ce61b3ccc2b
Author: zhangxy <928839929@qq.com>
Date: 2018-08-30 10:33:26 +0800
添加 testRun()
diff --git a/b.txt b/b.txt
index 3473edf..5fe14d5 100644
--- a/b.txt
+++ b/b.txt
@@ -1 +1,4 @@
my name is b file
+public void testRun(){
+
+}
###1.2,最新一次提交的第二个父提交
Administrator@USER-20171018VX MINGW64 /d/branch-test (master)
$ git show HEAD^2
commit 34af7c6b386f5e09d24340e0f8a1b1f6b5bfd47d (iss11)
Author: zhangxy <928839929@qq.com>
Date: 2018-08-30 10:30:19 +0800
添加 run()
diff --git a/a.txt b/a.txt
index d196d14..50e3bfc 100644
--- a/a.txt
+++ b/a.txt
@@ -5,3 +5,8 @@ my name is file a
public static void main(String [] args){
}
+
+public void run(){
+
+}
###1.3,最新一次提交的上两个提交。
Administrator@USER-20171018VX MINGW64 /d/branch-test (master)
$ git show HEAD^^
commit 79779c75aeea6a4f514d1c77db5d86431011e117
Author: zhangxy <928839929@qq.com>
Date: 2018-08-30 10:26:15 +0800
添加 main()
diff --git a/a.txt b/a.txt
index 759ac2f..d196d14 100644
--- a/a.txt
+++ b/a.txt
@@ -2,3 +2,6 @@ my name is file a
我是一个txt类型文件
你可以输入汉子并不会出现乱码
你可以向这里写入字符
+public static void main(String [] args){
+
+}
##2,HEAD~
###2.1,最新一次提交的上两个提交。
Administrator@USER-20171018VX MINGW64 /d/branch-test (master)
$ git show HEAD~2
commit 79779c75aeea6a4f514d1c77db5d86431011e117
Author: zhangxy <928839929@qq.com>
Date: 2018-08-30 10:26:15 +0800
添加 main()
diff --git a/a.txt b/a.txt
index 759ac2f..d196d14 100644
--- a/a.txt
+++ b/a.txt
@@ -2,3 +2,6 @@ my name is file a
我是一个txt类型文件
你可以输入汉子并不会出现乱码
你可以向这里写入字符
+public static void main(String [] args){
+
+}
##3,HEAD^和HEAD~结合使用
###3.1,想获取89a6a5a提交对象。
Administrator@USER-20171018VX MINGW64 /d/branch-test (master)
$ git show HEAD~3^2
commit 89a6a5a6f544ff74cc49341aab1484b084be7759 (dev)
Author: zhangxy <928839929@qq.com>
Date: 2018-08-29 21:23:50 +0800
介绍你可以向文件写入什么内容
diff --git a/a.txt b/a.txt
index e5f555c..0cde68b 100644
--- a/a.txt
+++ b/a.txt
@@ -1,2 +1,3 @@
my name is file a
我是一个txt类型文件
+你可以向这里写入字符