2014-09-10 125 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> 
找出特定提交的樹散列