git checkout会更新所有文件吗?

use*_*518 6 git git-checkout git-commands

新问题,我想确保我理解这一点.

当我git checkout <revision>这样做,这会将整个项目返回到当时的状态,还是仅重新创建在该特定修订中更改的文件?

例如:如果除了.git repo之外我的文件夹是完全空的git checkout master,那么,生成的文件是完整的项目,还是只有最近提交中更改的文件?

我问,因为我在各个点(从头开始)检查我的项目,而不是像预期的那样缓慢增长的项目,每个结账的大小变化很大.

jub*_*0bs 5

当 I 时git checkout <revision>,这是否将整个项目返回到当时的状态,还是仅重新创建在该特定修订版中更改的文件?

如果您的工作树暂存区是完全空的(.git当然除了子目录)并且您运行

git checkout <revision>
Run Code Online (Sandbox Code Playgroud)

那么您的工作树和暂存区将完美地反映该特定修订的内容。

另一方面,如果你运行时你的工作树不是空的git checkout,发生的事情要微妙得多,可能分为三种情况:

  1. 结帐没有问题,Git 会毫不费力地执行它:该特定修订的内容被复制到您的工作树中(如果需要,覆盖已经存在的内容)。或者
  2. 结帐,如果执行,会导致本地更改丢失;因此,Git(假设您没有使用该-f标志)会告诉您关闭并中止结帐。或者
  3. 可能会出现更复杂的情况,其中仅部分签出内容,而一些本地未提交的更改保留在您的工作树和/或索引中。有关这种情况的更多详细信息可以在我对为什么在签出不同的分支后仍然存在未暂存的更改的回答中找到.

[...] 每次结帐的大小差异很大。

您是否考虑了未跟踪的文件?您是否提交,然后删除大文件?仅根据您问题中提供的信息,我们只能假设大小变化很大的原因。