【问题标题】:Why do I get two different git SHAs when I commit the same thing twice? [duplicate]当我两次提交相同的事情时,为什么会得到两个不同的 git SHA? [复制]
【发布时间】:2013-08-15 01:04:55
【问题描述】:

试试这个:

mkdir a  
cd a
git init
touch f1
git add f1
git commit -m "Commit 1"
git log

注意 SHA。然后做

git commit --amend -m "Commit 1"
git log

请注意,SHA 发生了变化,尽管我所看到的关于提交本身没有任何变化(甚至没有提交日期。)

生成新 SHA 的这两个提交有何不同?

【问题讨论】:

    标签: git


    【解决方案1】:

    我在本地浏览了您的示例。如果您使用git cat-file 来检查提交对象...

    第一次提交后:

    $ git cat-file -p f9afca7508e2d97ca4babfb897fa5acefe67af54
    tree 56e3dd6f60494c9bbe56ea178b9a86c91d3139c6
    author Lars Kellogg-Stedman <lars@example.com> 1376499716 -0400
    committer Lars Kellogg-Stedman <lars@example.com> 1376499716 -0400
    
    Commit 1
    

    修改后:

    $ git cat-file -p 976778e7f58c4b2f89b4f652e89c420e1266d297
    tree 56e3dd6f60494c9bbe56ea178b9a86c91d3139c6
    author Lars Kellogg-Stedman <lars@example.com> 1376499716 -0400
    committer Lars Kellogg-Stedman <lars@example.com> 1376499733 -0400
    
    Commit 1
    

    请注意,这两个提交对于“提交者”元数据具有不同的时间戳。由于数据不同,commit ID 也不同。如果更改数据,则更改对象的 SHA1。

    【讨论】:

    • 对,任何“重新提交”某事的操作都会改变提交者的时间戳。我不认为任何东西会改变作者的,所以你总是可以看到谁做了提交的工作,谁最后通过一些辅助操作移动/重用了提交。它只在新提交的数据中保留一个级别的这种更改(其余的仍然存在于其他提交对象中,尽管无法从较新的提交中访问)。 rebasecherry-pickcommit --amend 等都进行了新的提交,至少更改了提交者的日期。有些可能还会更改指向的树和/或父树。
    • 我不知道作者的提交和提交者的提交有单独的日期。这就解释了。谢谢!
    猜你喜欢
    • 2015-12-13
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2019-03-07
    • 2021-08-03
    相关资源
    最近更新 更多