2016-09-21 44 views
3

正如我所瞭解的那樣,當您在Git中進行提交時,會創建倉庫整個狀態的快照,並允許我在必要時回到該狀態。所以,對我來說,提交併不代表更改,而是存儲庫的狀態。當你想回到舊狀態時,你可以這樣做git checkout commit-hashGit中的提交是否代表存儲庫的狀態?

但是,我不明白當你做cherry-pick時會發生什麼,因爲它只獲取該提交所做的更改。

如果提交表示整個存儲庫的狀態,Git如何在cherry-pick期間獲得兩次提交之間的差異?

回答

6

你的理解是正確的:「提交」是git不是更改(增量),但代表整個狀態。但是一個提交包含的不僅僅是狀態:它還有一個指向父提交的指針(通常是一個,但可以是任何數字),即存儲庫歷史記錄中的前一個提交。

父指針讓git弄清當前提交與其父代之間的差異。這是櫻桃選擇:它計算差異,然後僅將這些差異應用於當前狀態。

相關問題