如何使用git reset --hard命令重置除4个文件之外的所有内容

45

假设没有任何文件被暂存,重置所有已完成工作的推荐方法是什么,但保留文件:

app/models/a.rb
app/views/a/index.html.rb
config/foo.rb
config/bar.rb

在 app/models/ 和 app/views/ 目录中还存在其他我不想保留的脏文件。

3个回答

61
根据你描述的问题,看起来你并不想进行“重置”。最简单的方法是:
git add app/models/a.rb app/views/a/index.html.rb config/foo.rb config/bar.rb
git checkout .

所以,它将你的4个文件添加到索引中,并为其他文件检出干净版本(即丢弃更改)。
我假设你之前没有暂存(git add)修改过的文件(那么你应该使用reset取消暂存)。

1
我认为使用 git clean -fd 更好。 - Ron Garrity
2
是的,它们不同 - checkout 适用于已跟踪文件,而 clean 适用于未跟踪文件。 - kan
很棒,让我开心了 :) - messerbill
一个简短的解释“为什么”这个能够工作会很有趣! - Niko Pasanen
@np8 git add 将文件添加到暂存区,然后 git checkout . 用于处理未暂存的文件。 - phoxd

16

一种方法是先git commit这四个文件,然后硬重置,接着撤销提交:

git add <files to keep>
git commit -m "temp"
git reset --hard
git reset HEAD~

7
如果那四个文件在索引中,而脏文件不在,简单的 git-clean 就可以解决问题。 如果不确定,请先使用 --dry-run 开关,并注意 --exclude 开关。
否则,请参考 siride's answer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接