为什么文件检出到索引中出现的先前变更集?

时间:2011-08-18 16:31:16

标签: git

D:\code\gt>git init
Initialized empty Git repository in D:/code/gt/.git/

D:\code\gt>echo Zero > a

D:\code\gt>git add a

D:\code\gt>git commit -m a
[master (root-commit) 392580e] a
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 a

D:\code\gt>echo One > a

D:\code\gt>git add a

D:\code\gt>git commit -m another
[master 271efba] another
 1 files changed, 1 insertions(+), 1 deletions(-)

D:\code\gt>echo Second > a

D:\code\gt>git add a

D:\code\gt>git commit -m "yet another"
[master 8d2041e] yet another
 1 files changed, 1 insertions(+), 1 deletions(-)

D:\code\gt>git status
# On branch master
nothing to commit (working directory clean)

D:\code\gt>git checkout  271ef a

D:\code\gt>git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   a
#

正如您所看到的,我以第二次提交时的状态检出文件。但是,我不明白为什么它已经添加到索引中。为什么git不允许我添加?

1 个答案:

答案 0 :(得分:4)

这一点在git checkout documentation中并不完全清楚,所以这是一个很好的问题。

当你这样做时:

git checkout COMMIT -- PATH

...工作副本 PATH的索引使用COMMIT中的版本进行更新。因此,相对于HEAD,运行该命令后,该文件确实发生了变化。