2014-09-10 127 views
1

在创建相同状态后,是否有一个提交int git历史记录相同的散列?例如恢复后?恢复以前的提交后,git是否提交相同的散列?

有可能是有更多的提交一个哈希?

让我们假设历史

commit number 1: hash 1111 
commit number 2; hash 2222 
commit number 3(revert of 2), hash 3333 or 1111? 

我知道有相当类似的问题Can you get a duplicate hash in Git in any way and what are the implications,但它并没有回答我的问题。

回答

1

是的,如果你恢复提交,它会有一个新的散列。

这是因为提交散列取决于作为祖先的任何提交,即任何可以通过不断跟随父提交达成的提交。由于提交3和提交1具有不同的祖先(一个祖先有2个祖先,另一个没有祖先),它会得到一个新的哈希。


在相关说明中,git中的每个对象都会得到一个散列;提交,树(目录),斑点(文件)和标签。通过恢复提交3创建的将具有相同的散列,因为树提交1指向树,因为树只依赖于它们的内容。他们不追踪他们的历史。这只能通过指向树的提交来完成。您可以通过

$ git cat-file -p <commit-hash> 
找出特定提交的树散列