我对git checkout的行为感到困惑。如果我想获取文件的以前版本并进行如下操作:
git checkout HEAD^^ Xml/Config-Profile.xml
git status
I get:
On branch master
Your branch is up-to-date with 'origin/master'
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: Xml/Config-Profile.xml
如果我运行 git diff,却没有差异。我已经弄清楚了,如果我运行 git diff --cached,它会显示更改,所以我猜这意味着我的 checkout 命令从存储库的 HEAD^^ 提交中提取并更新了“仅索引”? 我的担心是(我无法直接从 checkout 手册页面获取信息):
1)为什么只更新了索引?为什么它不像我刚刚用某个(先前的)文件副本替换了工作目录中的 Config-Profile.xml 文件一样?
2)我想让我感到困惑的是,也许这只是语义方面的问题,如果我在我的工作目录中编辑一个文件,并决定我不喜欢它并执行 git checkout,它将替换工作目录中的文件。在陈述完之后,我猜测 git checkout 将最新的文件从索引中提取到工作目录中,而不是从存储库中的最新提交中提取文件?
3)有一个命令可以将文件直接从提交中提取到工作目录中,就好像我自己手动编辑到那个点一样吗?或者我需要创建一个自定义别名?
提前感谢。