2013-02-07 65 views
1

我希望以下問題不會太籠統。如果沒有,我會告訴我,這篇文章可能會在其他地方遷移。 所以,我已經讀過這個非常好的doc(頁面底部10),提交可以被視爲一個分支本身。這樣說可以這樣說?一個提交如何支持一個分支的整個歷史(對於數學思想的人來說,可以將一個提交視爲一個樹(支持所謂的分支的歷史)在某棵樹上)本身就是一個分支嗎? - git

回答

3

我認爲這對於「分支」概念的討論太深奧了,但這不是非常重要。

效果是每個提交都表示一個分支,其HEAD是該提交,與典型分支的不同之處在於分支名稱(即提交的SHA-1)是不可變的。 hash-as-branch-name總是指向hash-as-commit。

使用此命令嘗試一下:git checkout 2ae907(其中引用的是前面的某個提交)。你會得到這樣的文字:

注意:檢出'2a9e07'。

你處於'分離狀態'狀態。您可以環視,製作 實驗性更改並提交它們,並且您可以放棄您在此狀態下進行的任何提交 而不影響任何分支,方法是執行 另一個結帳。

提交被添加到提交圖中,所以每個提交都是包含所有先前歷史記錄的子圖的根。

+0

是的,但其中與一個提交到其父代之間的鏈接相關的數據存儲在哪裏? – Newben

+0

git實現了一個有向無環圖來存儲提交之間的關係。 DAG如何實現對於理解提交如何相互關聯的抽象概念並不重要。 –

+0

@Newben:每個提交都包含對其父項的引用。你可以用例如'git show --format = raw ' - 它會列出父提交的ID。請注意,提交可能有多個父代(合併提交),或者沒有(提交初始提交)。 – sleske

1

在git中,一個提交總是包含完成樹的歷史記錄(通過包含對其父提交的引用)。從這個意義上說,你可以把它看作一個分支。唯一的區別是分支有一個符號名稱,所以你不必通過它的散列來引用它。

+0

所以如果我理解的很好,每個提交爲它的每個'文件'存儲一系列連續的diff文件的引用,其組成導致這個'文件'? – Newben

+0

不完全。如果你閱讀[Pro Git](http://git-scm.com/book),我相信你會受到啓發。 –

+0

可能會更準確地說,提交包含此時樹的快照而不是完整的歷史記錄。歷史根本定義爲一系列事件而非單一事件。 – R0MANARMY

相關問題