如何还原未提交的更改,包括文件和文件夹?

MEM 1012 git git-revert git-reset git-clean

是否有一个git命令可以恢复工作树和索引中的所有未提交的更改,还可以删除新创建的文件和文件夹?

htanata.. 1701

您可以运行以下两个命令:

# Revert changes to modified files.
git reset --hard

# Remove all untracked files and directories.
# '-f' is force, '-d' is remove directories.
git clean -fd

  • 在运行git clean之前运行'git clean -nd'来预览更改是个好主意,以确保您没有未被跟踪的文件或目录,您将关注它们将被删除. (145认同)
  • 保存某人去文档的行程:-f是force,-d是删除目录,-n是空运行(也是--dry-run;显示输出而没有做任何事情) (76认同)
  • `git clean -i`用于交互模式. (11认同)
  • @IgorGanapolsky你可能正处于合并冲突的中间.尝试运行`git merge --abort`. (4认同)

Ramashish Ba.. 539

如果要仅在当前工作目录中还原更改,请使用

git checkout -- .

在此之前,您可以在不实际执行任何操作的情况下列出将要还原的文件,只需检查将要发生的情况,即可:

git checkout --

  • 'git reset --hard'将撤消分阶段和非分阶段的更改,而'git checkout - .' 将仅撤消未分级的更改 (104认同)
  • 这和`git reset --hard`有什么区别? (33认同)
  • git checkout - 将简单列出将要还原的文件(无操作,只列出).如果你想在进行git checkout之前看看哪些文件会受到影响,这很有用. (7认同)

小智.. 104

使用"git checkout - ..."放弃工作目录中的更改

git checkout -- app/views/posts/index.html.erb

要么

git checkout -- *

删除对git status中未分段文件所做的所有更改,例如

modified:    app/controllers/posts.rb
modified:    app/views/posts/index.html.erb

  • 除非我在更改文件所在的目录中,否则`git checkout - *`对我不起作用.要检查整个存储库中的所有文件,您必须执行`git checkout - :/` (5认同)

小智.. 52

一个非平凡的方法是运行这两个命令:

  1. git stash 这会将您的更改移动到存储区,使您返回到HEAD状态
  2. git stash drop 这将删除在最后一个命令中创建的最新存储.

  • @ b0xxed1n Stashing是关于未提交的更改,显然它对它们有用. (7认同)
  • 我已经将它用于未提交的更改并且它可以正常工作. (4认同)
  • 这不适用于未提交的更改,仅适用于已提交的更改. (3认同)

Fr0sT.. 19

git clean -fd

没有帮助,新文件仍然存在.我所做的是完全删除所有工作树然后

git reset --hard

有关添加清除选项的建议,请参阅" 如何清除git中的本地工作目录? ".-x

git clean -fdx

注意 -x标志将删除Git忽略的所有文件,所以要小心(参见我参考的答案中的讨论).


Josnidhin.. 13

我想你可以使用以下命令: git reset --hard


Rob.. 5

请注意,可能仍有文件似乎没有消失 - 它们可能未经编辑,但由于CRLF/LF更改,git可能已将其标记为正在编辑.看看你.gitattributes最近是否做了一些改变.

在我的情况下,我已将CRLF设置添加到.gitattributes文件中,因此,所有文件都保留在"已修改文件"列表中.更改.gitattributes设置使它们消失.