使用git,如何将工作树(本地文件系统状态)重置为索引(“暂存”文件)的状态?

使用git,如何将工作树(本地文件系统状态)重置为索引(“暂存”文件)的状态?,git,Git,情况: 编辑文件 使用git Add将文件添加到索引中(这些文件现在处于“暂存状态”) 编辑更多文件 现在我们有三种不同的状态:头的状态(指向最后一次提交)、索引的状态(包括所有添加的或“暂存”的文件)和工作树的状态(未暂存的本地文件系统状态)。撤消工作树中的更改以使其与索引状态匹配的命令是什么?您可以使用(git checkout index)。请注意,您需要添加 -f强制其覆盖现有文件,或 -f-a强制覆盖索引中的所有路径 您可以使用。保存隐藏后,如果不想保留,可以使用git stash

情况:

  • 编辑文件
  • 使用git Add将文件添加到索引中(这些文件现在处于“暂存状态”)
  • 编辑更多文件
  • 现在我们有三种不同的状态:头的状态(指向最后一次提交)、索引的状态(包括所有添加的或“暂存”的文件)和工作树的状态(未暂存的本地文件系统状态)。撤消工作树中的更改以使其与索引状态匹配的命令是什么?

    您可以使用(
    git checkout index
    )。请注意,您需要添加

    • -f
      强制其覆盖现有文件,或
    • -f-a
      强制覆盖索引中的所有路径

    您可以使用。保存隐藏后,如果不想保留,可以使用git stash drop。

    我倾向于使用git checkout。放弃工作目录下的所有更改。如果您不在存储库的根目录下,这会产生不同


    此命令不会删除新创建的文件,这通常是一件好事。如果您需要这样做,那么您也可以使用git clean。

    git checkout://
    放弃工作树中的所有更改,并将其替换为索引中的内容,而不考虑当前的工作目录


    我认为其他答案没有涵盖全部内容。以下是您需要的:

    只需命令:

    git签出索引-fa
    git clean-fd
    
    附详细评论:

    注意:运行
    git status
    。以绿色显示的更改在索引中。这些都是“阶段性”变化。以红色显示的更改位于工作树或本地文件系统中,但不在索引中。这些是“未老化”的变化。调用
    git checkout index-fa
    强制工作树与索引匹配,因此运行该命令后,
    git status
    将不再以红色显示这些更改,除非它是工作树中的全新文件,在这种情况下,需要
    git clean-fd
    来删除/删除它

    #1“强制签出”将显示从索引(暂存/添加的文件)到
    #工作树(本地文件系统)
    git签出索引-fa
    # 2. '强制清理(删除)工作区中的所有文件和目录
    #树,但不在索引中。警告:这是破坏性的
    #命令,并且无法撤消。这就像执行“rm”来删除文件一样。
    #首先,确保在运行'git status'时没有红色的更改
    #你想留下来。
    git clean-fd
    
    mangit签出索引

    -f,--force
    强制覆盖现有文件
    -a、 --全部
    签出索引中的所有文件。不能与一起使用
    显式文件名。
    
    另见:
  • 这个
  • [我的答案,其中包含“关于在git中签出文件或目录的所有内容”]

  • 这也适用于单个文件名:
    git checkout[file…]
    。谢谢出于好奇,您知道如何撤销此操作吗?我发现
    git checkout://
    会丢弃工作树中的所有更改,而不管当前的工作目录如何。我已经使用git多年了,似乎每天都能学到一些新东西。当我需要另一个分支的文件时,我遇到了这个问题,所以我检查了它。然后编辑,并希望恢复。您可以在不指定分支名称的情况下再次执行
    git checkout
    ,它默认为索引的状态。干得好。@Gershy,你不能撤销这个。撤消此操作类似于撤消
    rm some_文件
    ,或者撤消跳过垃圾桶的删除操作。所以,在你做这件事之前,确保这是你真正想要的。这太不直观了,我想知道我是否误解了什么。我想做的是
    git reset--hard
    有合并冲突,这样我就可以
    git pull
    最新版本了。但是git不允许我对单个文件这样做。除了git stash之外,真的没有办法回滚对工作目录中文件的更改吗???@Andy:要回滚特定文件,
    git checkout--
    。噢!我甚至没有想到这一点,这与我来自的其他SCM和GUI工具不同。谢谢我对你的问题进行了编辑,以定义并明确“工作树”和“索引”的含义,因为我多年来一直在使用
    git
    ,直到昨天才发现这些术语的含义。我认为这将有助于接触更多的人,因为大多数使用
    git
    的“大众”不知道这些术语,但他们知道他们的本地文件系统是什么,什么是
    git add
    ,以及当他们查看
    git status
    时,绿线(索引中的分段内容)意味着什么。希望您对这些更改没有意见。有关本地手册页,请参阅
    mangit签出索引
    。运行
    mangit
    然后运行
    /
    并键入
    git签出索引
    ,然后输入,也可以在主
    mangit
    页面中阅读关于它的简短介绍。它的描述是“将文件从索引复制到工作树”。