如何在我的工作副本中排除非指数的变更?


当前回答

你可以使用 git stash - 如果有什么不对劲,你仍然可以从 stash 返回。 类似于这里的一些其他答案,但这个也删除所有未输入的文件,以及所有未输入的删除:

git add .
git stash

如果你检查一切都没事,请放下:

git stash drop

比拉尔·马克索德(Bilal Maqsood)与吉特清洁的答案也为我工作了,但我有更多的控制权 - 如果我偶然做STH,我仍然可以恢复我的变化

更新

我认为还有1个变化(我不知道为什么这对我以前工作):

git add. - A 而不是 git add.

没有 -A 删除的文件将不会复制

其他回答

它甚至在常见的 git 许可之外的目录中工作。

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

最近发生在我身上

如果您只是想删除现有文件的更改,请使用支票(文档在这里)。

git checkout -- .

没有分支是指定的,所以它检查了当前分支. 双希芬(--)告诉Git,接下来的应该作为其第二个论点(路),你错过了一个分支的规格。

如果您想要从您的最后订单中删除添加的文件,请使用清洁(文档在这里):

git clean -i 

选项 -i 启动一个互动清洁,以防止错误的删除。 还有许多其他选项可用于更快的执行; 查看文档。

如果您想将更改转移到持有空间以获得后续访问,请使用 stash (在这里文档):

git stash

所有更改将转移到 Git 的 Stash,以便随后访问。 有几个选项可用于更色彩的 Stash; 查看文档。

我真的觉得这篇文章有用来解释什么时候使用什么命令: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

有几个不同的案例:

如果您没有下载文件,则使用 git checkout. Checkout “更新工作树中的文件以匹配指数中的版本”。 如果文件没有下载(因此添加到指数)... 这个命令将基本上将文件转换为您最后的承诺。

我怀疑使用 git stash 是很受欢迎的选择,因为它有点不那么危险. 你总是可以回到它,如果你偶然在使用 git reset 时跳过太远。

请参见上面的文章以获得更多建议。

对于当前工作目录使用中的所有未输入的文件:

git restore .

对于特定文件的使用:

git restore path/to/file/to/revert

这与 git 交换器一起取代了过度加载的 git 支票(见这里),从而取消了论点的分歧。

如果一个文件既有步骤和未步骤的变化,则仅在 git diff 中显示的未步骤的变化将被转换。

之前 Git 2.23

对于当前工作目录中的所有未输入的文件:

git checkout -- .

对于一个特定的文件:

git checkout -- path/to/file/to/revert

在这里消除双重性(这被称为论点不双重性)。

另一种更快的方式是:

git stash save --keep-index --include-untracked

你不需要包含 - 包括 - 不被吸引,如果你不想仔细了解它。

接下来,你可以用 git stash drop 命令放下这个 stash 如果你愿意。