新手问题,我想确保我理解了这个问题。
当我执行git checkout <revision>
命令时,它会将整个项目返回到那个时刻的状态,还是只会重新创建那个特定版本中更改的文件?
例如:如果我的文件夹除了.git repo以外完全为空,然后我执行git checkout master
命令,结果的文件是整个项目吗,还是仅为最近提交更改的文件?
我问这个问题,因为我正在不同的时间点(从一开始)检查我的项目,而且每次检查的大小都有很大的变化, 与人们预期的项目逐渐增长的方式不同。
新手问题,我想确保我理解了这个问题。
当我执行git checkout <revision>
命令时,它会将整个项目返回到那个时刻的状态,还是只会重新创建那个特定版本中更改的文件?
例如:如果我的文件夹除了.git repo以外完全为空,然后我执行git checkout master
命令,结果的文件是整个项目吗,还是仅为最近提交更改的文件?
我问这个问题,因为我正在不同的时间点(从一开始)检查我的项目,而且每次检查的大小都有很大的变化, 与人们预期的项目逐渐增长的方式不同。
当我执行
git checkout <revision>
命令时,它是否会将整个项目返回到该时刻的状态,还是仅重新创建那个特定修订中更改的文件?
如果您的工作树和暂存区完全为空(除了.git
子目录),并且您运行以下命令:
git checkout <revision>
如果在运行 git checkout
命令时你的工作区不为空,情况就会更加微妙,并可分为以下三种情况:
-f
标志)会告诉您该操作无法进行并中止检出。如果您的工作树和暂存区与特定版本的内容完全相同,那么您的工作树和暂存区将完美地反映该特定版本的内容。
[...] 每个检出的大小差异很大。
您是否考虑到未跟踪的文件?您是否提交后删除了大型文件?仅根据您提供的信息,我们只能对检出大小差异很大的原因进行推测。
从文档中可以看到:"将工作树中的文件更新为与索引或指定树中版本相匹配的版本。" 在您的示例中,它将完全返回仓库到检出时的状态。
但是,正如Jubobs所指出的,在您上次检出后如果对仓库的状态进行了任何更改,则其行为会有所不同。如果是这种情况,他的答案比我的更详细。
还要注意,这仅适用于由git跟踪的文件,因此您存放的任何其他文件都不会受到影响。
git checkout <revision> .
- user2089518git checkout
的结果取决于具体情况。 - jub0bs