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

是否有 git 命令来还原工作树和索引中所有未提交的更改,并且还删除新创建的文件和文件夹?

答案

# 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 checkout -- .
git checkout --
git checkout -- app/views/posts/index.html.erb
git checkout -- *
modified:    app/controllers/posts.rb
modified:    app/views/posts/index.html.erb

一种简单的方法是运行以下两个命令:

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

我认为您可以使用以下命令: git reset --hard

请注意,仍有一些文件似乎不会消失 - 它们可能未编辑,但是 git 可能由于 CRLF / LF 更改而将其标记为已编辑。查看您最近是否对.gitattributes进行了一些更改。

就我而言,我已将 CRLF 设置添加到.gitattributes文件中,因此,所有文件都保留在 “已修改文件” 列表中。更改. gitattributes 设置会使它们消失。

git checkout filename

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

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

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

git 还原。

如果要还原所有 C 源文件以匹配索引中的版本,则可以执行

git 恢复 '* .c'

git checkout .
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your 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.php
        modified:   application/views/drivers/add.php
        modified:   application/views/drivers/load_driver_info.php
        modified:   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 status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean