Git 中的提交是否代表存储库的状态?
Does a commit in Git represent the state of a repository?
据我了解,当您在 Git 中进行提交时,会生成存储库整个状态的快照,这使我可以在必要时返回到该状态。因此,对我而言,提交代表的不是更改,而是存储库的状态。当你想回到旧状态时,你可以做 git checkout commit-hash
但是,我不明白当您执行 cherry-pick
时会发生什么,因为它只获得该提交所做的更改。
如果提交表示 整个 存储库的状态,Git 如何在 cherry-pick
期间获得两次提交之间的差异?
你的理解是正确的:一个"commit"是git不是一个变化(delta),而是代表了整个状态。但是提交包含的不仅仅是状态:它还有一个指向父提交的指针(通常是一个,但可以是任意数字),即存储库历史记录中的上一个提交。
父指针让 git 找出当前提交与其父提交之间的差异。这就是 cherry-pick 所做的:它计算差异,然后将这些差异应用到当前状态。
据我了解,当您在 Git 中进行提交时,会生成存储库整个状态的快照,这使我可以在必要时返回到该状态。因此,对我而言,提交代表的不是更改,而是存储库的状态。当你想回到旧状态时,你可以做 git checkout commit-hash
但是,我不明白当您执行 cherry-pick
时会发生什么,因为它只获得该提交所做的更改。
如果提交表示 整个 存储库的状态,Git 如何在 cherry-pick
期间获得两次提交之间的差异?
你的理解是正确的:一个"commit"是git不是一个变化(delta),而是代表了整个状态。但是提交包含的不仅仅是状态:它还有一个指向父提交的指针(通常是一个,但可以是任意数字),即存储库历史记录中的上一个提交。
父指针让 git 找出当前提交与其父提交之间的差异。这就是 cherry-pick 所做的:它计算差异,然后将这些差异应用到当前状态。