您的位置 首页 > 娱乐休闲

『dddd3』dddd373游24小时交易平台

选择修订版本

使用简短的SHA-1

关于什么是SHA-1,参照如下log命令的结果,其中每一个提交都有一串无意义的随机字母数字字符串,这就是SHA-1。它可以确定每一个提交都有一个不同的可识别ID。

$ Git log

commit 4416a2c9d6c5c010d42a2326170c4a9ddd54cbd3 (HEAD -> master, origin/master, origin/HEAD)

Merge: c7a8ec8 7957b99

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:56:58 2019 +0800

fix conflict

commit 7957b99d73b8e2782aed8c327359ade6aaf7f6eb (testing)

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:47:14 2019 +0800

changed by testing branch

如果想取得特定的提交,可以使用SHA-1。如下的两个命令是等价的,因为git支持缩短的SHA-1编码。

$ git show 7957b99d73b8e2782aed8c327359ade6aaf7f6eb

$ git show 7957b

当然,越庞大的项目,拥有的提交就越多,那么缩短的SHA-1的位数就要相应的增加,以确定唯一性。

引用日志

Git 会在后台保存一个引用日志(reflog),记录了最近几个月你的 HEAD 和分支引用所指向的履历。

$ git reflog

4416a2c (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: commit (merge): fix conflict

c7a8ec8 HEAD@{1}: checkout: moving from testing to master

7957b99 (testing) HEAD@{2}: commit: changed by testing branch

812b289 HEAD@{3}: checkout: moving from master to testing

c7a8ec8 HEAD@{4}: commit: changed by master branch

812b289 HEAD@{5}: checkout: moving from testing to master

812b289 HEAD@{6}: checkout: moving from master to testing

812b289 HEAD@{7}: merge testing: Fast-forward

6fa2268 (tag: v1.0) HEAD@{8}: checkout: moving from testing to master

812b289 HEAD@{9}: commit: made a change

6fa2268 (tag: v1.0) HEAD@{10}: checkout: moving from master to testing

6fa2268 (tag: v1.0) HEAD@{11}: commit (amend): combine commit second time

fec3551 HEAD@{12}: commit (amend): combine commit

a3191d2 HEAD@{13}: commit: normalCommit.txt

c4bea31 (tag: v0.9) HEAD@{14}: commit: First commit

6e2fa09 (gtNew/master) HEAD@{15}: clone: from

上述示例显示了全部的履历。如果希望指定某次提交,可以使用如下命令

$ git show HEAD@{1}

commit c7a8ec8a7a0941ec3301859d715dae6e9f6ab8ba

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:45:58 2019 +0800

changed by master branch

diff --git a b

index fa49b07..9161f20 100644

--- a

+++ b

@@ -1 +1,2 @@

new file

+changed by master branch

\ No newline at end of file

注意,引用日志只针对本地操作。这也是这个命令不太实用的原因。

祖先引用

祖先引用是另一种指明一个提交的方式。 如果你在引用的尾部加上一个 ^, Git 会将其解析为该引用的上一个提交。下面是全部的提交历史。

$ git log --pretty=format:'%h %s' --graph

* 4416a2c fix conflict

|\

| * 7957b99 changed by testing branch

* | c7a8ec8 changed by master branch

|/

* 812b289 made a change

* 6fa2268 combine commit second time

* c4bea31 First commit

* 6e2fa09 Initial commit

可以使用HEAD^来查看上一个提交(父提交)。

$ git show HEAD^

commit c7a8ec8a7a0941ec3301859d715dae6e9f6ab8ba

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:45:58 2019 +0800

changed by master branch

diff --git a b

index fa49b07..9161f20 100644

--- a

+++ b

@@ -1 +1,2 @@

new file

+changed by master branch

\ No newline at end of file

如果是合并提交,那么它会有两个父提交。命令可以在后面加上数字来指定是哪一个。第一父提交是所在分支,第二父提交指定被合并的分支。如:

第一父提交

$ git show 4416a2c^

commit c7a8ec8a7a0941ec3301859d715dae6e9f6ab8ba

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:45:58 2019 +0800

changed by master branch

diff --git a b

index fa49b07..9161f20 100644

--- a

+++ b

@@ -1 +1,2 @@

new file

+changed by master branch

第二父提交

$ git show 4416a2c^2

commit 7957b99d73b8e2782aed8c327359ade6aaf7f6eb (testing)

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:47:14 2019 +0800

changed by testing branch

diff --git a b

index fa49b07..53099b9 100644

--- a

+++ b

@@ -1 +1,2 @@

new file

+changed by tesing branch

\ No newline at end of file

另外命令中还可以使用~符号。如下面的两个命令是等价的。表示太爷爷辈的提交。

$ git show HEAD~3

$ git show HEAD^^^

提交区间

当有多个分支时可以通过如下命令来查询分支间相互不同的提交。比如

$ git log master..testing

查询testing分支有哪些提交没有反映到master分支上。相反,如下命令查询testing分支中所没有的master分支的提交

$ git log testing..master

commit 4416a2c9d6c5c010d42a2326170c4a9ddd54cbd3 (HEAD -> master, origin/master, origin/HEAD)

Merge: c7a8ec8 7957b99

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:56:58 2019 +0800

fix conflict

commit c7a8ec8a7a0941ec3301859d715dae6e9f6ab8ba

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:45:58 2019 +0800

changed by master branch

可以看到,master分支是主分支,提交必然会比testing分支多。所以上面的两个命令输出结果是不同的。

上述方式是双点查询。下面介绍多点查询。

比如,你想查看所有被 refA 或 refB 包含的但是不被 refC 包含的提交,你可以输入下面中的任意一个命令,它们是等价的。

$ git log refA refB ^refC

$ git log refA refB --not refC

最后是三点查询

$ git log master...testing

commit 4416a2c9d6c5c010d42a2326170c4a9ddd54cbd3 (HEAD -> master, origin/master, origin/HEAD)

Merge: c7a8ec8 7957b99

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:56:58 2019 +0800

fix conflict

commit c7a8ec8a7a0941ec3301859d715dae6e9f6ab8ba

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:45:58 2019 +0800

changed by master branch

这个结果看起来和双点查询的git log testing..master的差不多。其实三点查询是列出不同分支中的不同提交。因为testing的提交都被合并到master中了,所以不存在和master不同的提交。但是master中存在与testing不同的提交。

$ git log --left-right master...testing

commit < 4416a2c9d6c5c010d42a2326170c4a9ddd54cbd3 (HEAD -> master, origin/master, origin/HEAD)

Merge: c7a8ec8 7957b99

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:56:58 2019 +0800

fix conflict

commit < c7a8ec8a7a0941ec3301859d715dae6e9f6ab8ba

Author: kutilion <kutilion@gmail.com>

Date: Wed Apr 3 22:45:58 2019 +0800

changed by master branch

--left-right参数可以显示提交是哪一个分支的。不如上面的示例,表示显示出的提交都是master的,因为有 < 符号。当然,如果有testing分支的提交,则会显示 >。

以上的介绍都是针对的本地。很多时候需要和远程的仓库的某个分支比较提交是否不同,那么可以使用如下命令。以双点提交为例:

$ git log origin/master..HEAD

commit 013c1ed1006d469d59cf72b80925cba15ee051ca (HEAD -> master)

Author: kutilion <kutilion@gmail.com>

Date: Mon Apr 8 21:36:13 2019 +0800

git log

显示了本地存在,但是远程仓库不存在的提交。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“dddd3,dddd373游24小时交易平台,dddd332,dddd312,dddd3885,app”边界阅读