gpt4 book ai didi

git - 在提交 git checkout 文件后,git diff 显示没有变化?

转载 作者:太空狗 更新时间:2023-10-29 14:00:31 26 4
gpt4 key购买 nike

我对 git checkout 行为感到困惑。如果我想获取该文件的先前版本并执行以下操作:

git checkout HEAD^^ Xml/Config-Profile.xml
git status

我得到:

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) 是否有一个命令可以将文件从提交中直接 pull 到工作目录中,就像我自己手动编辑到那个点一样?还是我需要创建自定义别名?

提前致谢。

最佳答案

git checkout更新索引和工作树。

git diff将工作树与索引进行比较。

git diff --cached将索引与 HEAD 进行比较。

git help checkoutgit checkout <tree-ish> -- <pathspec> :

    The <tree-ish> argument can be used to specify a specific tree-ish 
(i.e. commit, tag or tree) to update the index for the given paths
before updating the working tree.

如果你真的只想更新你的工作树,你可以使用以下方法重置索引:

git reset HEAD Xml/Config-Profile.xml

根据您的建议git status输出。

关于git - 在提交 git checkout 文件后,git diff 显示没有变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com