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

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

932679 次浏览

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

您可以运行这两个命令:

# 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 -fd

没有帮助,新文件仍然存在。我完全删除了所有工作树,然后

git reset --hard

有关添加-x选项以清洁的建议,请参阅“https://stackoverflow.com/questions/673407/how-do-i-clear-my-local-working-directory-in-git/673420#673420";

git clean -fdx

说明-x标志将删除Git忽略的所有文件,因此请小心(请参阅我参考的答案中的讨论)。

使用“git check out--…”放弃工作目录中的更改

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

git checkout -- *

删除对git状态下的未暂存文件所做的所有更改,例如

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

如果您只想还原当前工作目录中的更改,请使用

git checkout -- .

在此之前,您可以列出将被恢复的文件,而无需实际执行任何操作,只是为了检查会发生什么,使用:

git checkout --

一个重要的方法是运行这两个命令:

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

安全而漫长的路:

  1. git branch todelete
  2. git checkout todelete
  3. git add .
  4. git commit -m "I did a bad thing, sorry"
  5. git checkout develop
  6. git branch -D todelete

用途:

git reset HEAD filepath

例如:

git reset HEAD om211/src/META-INF/persistence.xml

我通常使用这种效果很好的方法:

mv fold/file /tmpgit checkout fold/file

请注意,可能还有一些文件似乎不会消失——它们可能未经编辑,但Git可能已经将它们标记为正在编辑,因为CRLF/LF更改。看看你最近是否在.gitattributes中做了一些更改。

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

如果您有一个未提交的更改(仅在您的工作副本中),您希望在最近的提交中恢复到该副本,请执行以下操作:

git checkout filename

您可以使用以下Git命令,它可以恢复存储库中所有未提交的更改:

git checkout .

示例:

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)$ git statusOn branch masterYour branch is up-to-date with 'origin/master'.
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)
modified:   application/controllers/Drivers.phpmodified:   application/views/drivers/add.phpmodified:   application/views/drivers/load_driver_info.phpmodified:   uploads/drivers/drivers.xlsx
no changes added to commit (use "git add" and/or "git commit -a")
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)$ git checkout .
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)$ git statusOn branch masterYour branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean

Git 2.23引入了#0命令来恢复工作树文件。

要恢复当前目录中的所有文件:

git restore .

如果您想恢复所有C源文件以匹配索引中的版本,您可以这样做

git restore '*.c'

来自Git帮助:

 Changes to be committed:(use "git restore --staged <file>..." to unstage)
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)