我试图搜索git commit包含的内容以及commit的sha hash中的哪些部分.但是我可能会问错误的单词而我什么也没找到.
我想知道什么是承诺.我读了一下社区书,有以下图片:

但是我认为提交的字段多于图像中显示的字段.
现在主要的问题是:什么字段参与提交sha hash?我问这是因为我在不同的存储库中有两个提交具有相同的sha哈希,但具有不同的父提交.在此之前我认为两个提交可能具有相同的sha哈希,如果它们是相同的并且具有相同的父提交.所以我有点困惑.
我有两个本地存储库(git1,git2),一个是其他的克隆.
GIT1
commit 4f438f9579939312689eb67e5fb7957d87cfa036 <-- this commit
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon Jun 25 00:00:31 2012 +0300
stuff after change
commit e91e833158bb44f54f418cc5c3e1832452051428
Merge: dc69dc2 0b5912b
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon May 7 02:09:18 2012 +0300
Merge branch 'master' of e:/temp/git2
Conflicts:
file.file
commit 0b5912bd1a1cb9b78410fe5c0dc67845ca1deec5
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon May 7 02:06:46 2012 +0300
c8
commit dc69dc25a1e0c9067cbca19fe6a1d078a19138a0
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon May 7 02:06:29 2012 +0300
c7
commit f6d88da1ecc3106f6debe1eac80d4b02705bcecf
Merge: d1a3c38 6134e66
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon May 7 02:05:05 2012 +0300
Merge branch 'master' of e:/temp/git1
Conflicts:
file.file
commit d1a3c389416ff88e195e93def9a956fad1e63819
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon May 7 02:03:47 2012 +0300
Run Code Online (Sandbox Code Playgroud)
GIT2
commit e1ee3b2756d4d8440ae3661df3fb3ec9af7cd55a
Merge: 4296e1b 4f438f9
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon Jun 25 00:01:30 2012 +0300
Merge branch 'master' of e:/temp/git1
Conflicts:
file.file
commit 4f438f9579939312689eb67e5fb7957d87cfa036 <-- this commit
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon Jun 25 00:00:31 2012 +0300
stuff after change
commit 4296e1bd046c4008166cfc516ef5ee2ce98a27d1
Author: Michael Nesterenko <misha@gmail.com>
Date: Sun Jun 24 23:57:14 2012 +0300
more stuff
commit e91e833158bb44f54f418cc5c3e1832452051428
Merge: dc69dc2 0b5912b
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon May 7 02:09:18 2012 +0300
Merge branch 'master' of e:/temp/git2
Conflicts:
file.file
commit 0b5912bd1a1cb9b78410fe5c0dc67845ca1deec5
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon May 7 02:06:46 2012 +0300
c8
commit dc69dc25a1e0c9067cbca19fe6a1d078a19138a0
Author: Michael Nesterenko <misha@gmail.com>
Date: Mon May 7 02:06:29 2012 +0300
Run Code Online (Sandbox Code Playgroud)
承诺有不同的父母,但相同的sha哈希.
在同一个存储库的克隆中,两个不同的提交具有相同的id但提交不同,这是不可能的.家长的名单是一个犯该被散列数据的一部分.要查看散列的数据,您可以运行:
git cat-file commit <id-of-commit>
Run Code Online (Sandbox Code Playgroud)
散列的实际数据是由以下内容组成的标头:<type> <size>\0后跟提交的数据.例如,在我的git clone中提交:
$ printf 'commit %d\0' $(git cat-file commit 5498c5f05283cd248fd5e4f48cb8902e9ca6ce28 | wc -c) >tmp.dat
$ hexdump -C tmp.dat
00000000 63 6f 6d 6d 69 74 20 33 30 34 00 |commit 304.|
0000000b
$ git cat-file commit 5498c5f05283cd248fd5e4f48cb8902e9ca6ce28 >>tmp.dat
$ sha1sum tmp.dat
5498c5f05283cd248fd5e4f48cb8902e9ca6ce28 tmp.dat
Run Code Online (Sandbox Code Playgroud)
请注意,sha1sum与提交ID匹配,而父对象是提交对象的一部分:
$ git cat-file commit 5498c5f05283cd248fd5e4f48cb8902e9ca6ce28 | grep parent
parent 3ba46634202968045e05e4d7f969d97c61efa53d
Run Code Online (Sandbox Code Playgroud)
git log输出一个平坦的提交列表,但以git形式提交有向无环图.由于日志是一个扁平的提交列表,它只会直接反映在简单线性历史的简单情况下对父关系的提交.如果您有任何合并(或正在记录多个分支),您将无法直接从输出中推断父母关系git log.
要显示从提交到父母的实际链接,您需要使用类似git log --graph(我通常建议使用的--oneline)或图形可视化工具,例如gitk.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |