如何丢弃 Git 中未进行的变更?

如何丢弃工作副本中未包含在索引中的更改?

答案

对于当前工作目录中的所有未暂存文件,请使用:

git checkout -- .

对于特定文件,请使用:

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

--在这里消除争论的歧义

另一种更快的方法是:

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

如果您不希望透彻了解,则无需包含--include-untracked

之后,您可以根据需要使用git stash drop命令删除该存储。

似乎完整的解决方案是:

git clean -df
git checkout -- .

git clean会删除所有未跟踪的文件( 警告 :虽然它不会删除. gitignore 中直接提及的被忽略文件, 但可能会删除驻留在文件夹中的被忽略文件 ),并且git checkout清除所有未暂存的更改。

这会签出当前目录的当前索引,从而丢弃文件从当前目录向下的所有更改。

git checkout .

或此操作从索引中检出所有文件,覆盖工作树文件。

git checkout-index -a -f
git clean -df

通过从当前目录开始递归删除不受版本控制的文件来清理工作树。

-d :除未跟踪的文件外,删除未跟踪的目录

-f :强制(根据clean.requireForce设置可能不是必需的)

运行git help clean查看手册

我最喜欢的是

git checkout -p

这样就可以有选择地还原块。

也可以看看:

git add -p

由于没有答案表明我使用的确切选项组合,因此它是:

git clean -dfx
git checkout .

这是所使用的git clean选项的在线帮助文本:

-d

除未跟踪的文件外,还删除未跟踪的目录。如果未跟踪的目录由其他 Git 存储库管理,则默认情况下不会将其删除。如果您确实要删除这样的目录,请使用-f选项两次。

-f

如果 Git 配置变量clean.requireForce未设置为false ,除非给定-f-n-i ,否则 Git clean 将拒绝删除文件或目录。除非给出第二个-f ,否则 Git 将拒绝删除.git子目录或文件中的.git

-x

不要使用.gitignore (每个目录)和$GIT_DIR/info/exclude的忽略规则,但仍要使用-e选项提供的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。可以使用它(可能与git reset结合使用)创建一个原始的工作目录,以测试干净的构建。

另外, git checkout .需要在仓库的根部完成。

我真的发现这篇文章有助于解释何时使用什么命令: http : //www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

有几种不同的情况:

  1. 如果尚未暂存文件,则可以使用git checkout 。签出 “更新工作树中的文件以匹配索引中的版本”。如果文件尚未暂存(又添加到索引),则此命令实质上会将文件还原为您的最后一次提交。

    git checkout -- foo.txt

  2. 如果已暂存文件,则使用 git reset。重置会更改索引以匹配提交。

    git reset -- foo.txt

我怀疑使用git stash是一种流行的选择,因为它的危险性要小一些。如果您在使用 git reset 时不小心吹了太多东西,可以随时返回到它。默认情况下,重置是递归的。

请参阅上面的文章以获取更多建议。

最简单的方法是使用以下命令:

此命令用于放弃工作目录中的更改 -

git checkout -- .

https://git-scm.com/docs/git-checkout

在 git 命令中,通过使用以下方式实现未跟踪文件的存储:

git stash -u

http://git-scm.com/docs/git-stash

如果您只想删除对现有文件的更改 ,请使用checkout在此处记录 )。

git checkout -- .
  • 没有指定分支,因此它签出当前分支。
  • 双连字符( -- )告诉 Git,应将后面的内容作为其第二个参数(路径),而忽略了分支的指定。
  • 句点( . )表示所有路径。

如果要删除自上次提交以来添加的文件 ,请使用clean在此处记录 ):

git clean -i
  • -i选项启动一个交互式clean ,以防止误删除。
  • 还有一些其他选项可用于更快地执行。请参阅文档。

如果您希望将更改移至存放空间以供以后访问 ,请使用stash此处记录 ):

git stash
  • 所有更改都将移至 Git 的存储库,以便以后访问。
  • 少数选项可用于更细微的隐藏;请参阅文档。