情况:
现在我们有三种不同的状态。 HEAD的状态,索引的状态和工作树的状态。撤消工作树中的更改以使其与索引的状态匹配的命令是什么?
答案 0 :(得分:66)
我倾向于使用git checkout .
来放弃工作目录中的所有更改。如果您不在存储库的根目录,这会产生影响。
此命令不会删除新创建的文件,这通常是一件好事。如果您需要这样做,那么您也可以使用git clean
。
答案 1 :(得分:13)
您可以使用git stash save --keep-index
执行此操作。保存存储后,如果您不想保留它,可以使用git stash drop
。
答案 2 :(得分:9)
您可以使用git-checkout-index。请注意,您需要添加
-f
强制它覆盖现有文件,或-f -a
强制覆盖索引中的所有路径。答案 3 :(得分:3)
我认为其他答案没有涵盖全部部分。这是您需要的:
只是命令:
git checkout-index -fa
git clean -fd
附有详细评论:
注意:运行 git status
。以绿色显示的更改在您的索引中。这些是“阶段性”变化。以红色显示的更改位于您的工作树或本地文件系统中,但不在索引中。这些是“未分阶段”的变化。调用 git checkout-index -fa
会强制您的工作树与您的 index 匹配,因此 git status
在运行该命令后将不再以红色显示这些更改,除非它是您的工作树中的全新文件,在这种情况下,需要 git clean -fd
来移除/删除它。
# 1. 'f'orce checkout 'a'll paths from the index (staged/added files) to the
# working tree (local file system)
git checkout-index -fa
# 2. 'f'orce clean (remove) all files and 'd'irectories which are in the working
# tree but NOT in the index. WARNING WARNING WARNING: this is a destructive
# command and cannot be undone. It is like doing `rm` to remove files.
# First, make sure no changes exist in red when you run `git status` which
# you want to keep.
git clean -fd
来自man git checkout-index
:
-f, --force
forces overwrite of existing files
-a, --all
checks out all files in the index. Cannot be used together with
explicit filenames.