使用git,如何将工作树(本地文件系统状态)重置为索引(“暂存”文件)的状态?
情况:使用git,如何将工作树(本地文件系统状态)重置为索引(“暂存”文件)的状态?,git,Git,情况: 编辑文件 使用git Add将文件添加到索引中(这些文件现在处于“暂存状态”) 编辑更多文件 现在我们有三种不同的状态:头的状态(指向最后一次提交)、索引的状态(包括所有添加的或“暂存”的文件)和工作树的状态(未暂存的本地文件系统状态)。撤消工作树中的更改以使其与索引状态匹配的命令是什么?您可以使用(git checkout index)。请注意,您需要添加 -f强制其覆盖现有文件,或 -f-a强制覆盖索引中的所有路径 您可以使用。保存隐藏后,如果不想保留,可以使用git stash
git checkout index
)。请注意,您需要添加
强制其覆盖现有文件,或-f
强制覆盖索引中的所有路径-f-a
此命令不会删除新创建的文件,这通常是一件好事。如果您需要这样做,那么您也可以使用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
页面中阅读关于它的简短介绍。它的描述是“将文件从索引复制到工作树”。