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

Git 如何还原未提交的更改,包括文件和文件夹?,git,git-commit,git-reset,git-revert,git-clean,Git,Git Commit,Git Reset,Git Revert,Git Clean,是否有git命令来还原工作树和索引中所有未提交的更改,并删除新创建的文件和文件夹?我认为您可以使用以下命令: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命令来还原工作树和索引中所有未提交的更改,并删除新创建的文件和文件夹?

我认为您可以使用以下命令:
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 reset --hard
请参阅“”,以获取有关将
-x
选项添加到清洁的建议:

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

使用“Git签出--…”放弃工作目录中的更改

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

删除对处于git状态的未老化文件所做的所有更改,例如

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

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

git checkout -- .
在此之前,您可以列出将被还原的文件,而无需实际执行任何操作,只需检查将发生的情况,使用:

git checkout --

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

# 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 stash
    这会将您的更改移动到stash,使您回到头部状态
  • git stash drop
    这将删除上一个命令中创建的最新隐藏
  • 安全而漫长的道路:

  • git分行托德莱特
  • git checkout todelete
  • git添加。
  • git commit-m“我做了一件坏事,对不起”
  • git签出开发
  • git分行-D托德莱特
  • 使用:

    例如:

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

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

    mv fold/file /tmp
    git checkout fold/file
    

    请注意,可能仍然有一些文件看起来不会消失——它们可能未经编辑,但由于CRLF/LF更改,git可能已将它们标记为正在编辑。查看您最近是否在
    .gittributes
    中做了一些更改


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

    如果有未提交的更改(仅在工作副本中),您希望在最新提交时还原为副本,请执行以下操作:

    git checkout filename
    

    您只需使用以下git命令即可恢复存储库中所有未提交的更改:

    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
    
    ABC@ABC-PC明W64/c/xampp/htdocs/pod_管理员(主控)
    $git状态
    论分行行长
    您的分支机构是最新的“原始/主”分支机构。
    未为提交而暂存的更改:
    (使用“git add…”更新将提交的内容)
    (使用“git签出--…”放弃工作目录中的更改)
    修改:application/controllers/Drivers.php
    修改:application/views/drivers/add.php
    修改:application/views/drivers/load\u driver\u info.php
    修改:上传/drivers/drivers.xlsx
    未向提交添加任何更改(使用“git add”和/或“git commit-a”)
    ABC@ABC-PC明W64/c/xampp/htdocs/pod_管理员(主控)
    $git结帐。
    ABC@ABC-PC明W64/c/xampp/htdocs/pod_管理员(主控)
    $git状态
    论分行行长
    您的分支机构是最新的“原始/主”分支机构。
    没什么要承诺的,正在清理树
    
    git2.23引入了
    Git restore
    命令来恢复工作树文件

    还原当前目录中的所有文件

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

    如果要恢复所有C源文件以匹配索引中的版本,可以执行以下操作

    git还原'*.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)
    
    要提交的更改:
    (使用“git还原--暂存…”取消暂存)
    未为提交而暂存的更改:
    (使用“git add…”更新将提交的内容)
    (使用“git restore…”放弃工作目录中的更改)
    
    hhmm。。。我这么做了,但我的文件还在那里。git reset只恢复工作树中未限制的更改。它不会删除新文件和文件夹。我不知道如何使用gitSo做到这一点,如果我们通过添加新文件和文件夹来更改系统目录,然后我们想将该目录恢复到以前的状态(删除这些文件和文件夹),那么我们不能使用git做到这一点吗?那么我们能做的最好的事情就是恢复文件状态?但是,一旦我们创建了一个文件,我们就不能删除该文件,除非我们手动删除它?最好在运行git clean之前运行'git clean-nd'预览更改,以确保您不需要删除您关心的未跟踪的文件或目录。让某人浏览文档:-f是强制,-d是删除目录,-n是干运行(也-干运行;显示输出没有做任何事情)<代码> Git干净-i <代码>交互模式。它没有重置我的未分级文件,我必须先将它们放在一起。@ IgorGanapolsky,你可能处于合并冲突的中间。尝试运行<代码> Git合并-中止> <代码>。当我尝试这个时,我得到“错误:PosiScript”。“与任何文件不匹配”git知道。这与git reset--hard之间有什么区别?“git reset--hard”将撤消暂存和未暂存的更改,而“git checkout--.”将只撤消未暂存的更改。但是如果使用checkout并修改了文件,cmd将返回我需要执行合并,即使我只需要还原此更改也是如此签出——只列出要还原的文件(无需操作,只需列出)。如果您想在执行git签出之前查看哪些文件将受到影响,这将非常有用。
    git签出--*
    对我不起作用,除非我位于更改文件所在的目录中。若要签出整个存储库中的所有文件,您必须在
    git签出--*
    中执行
    git签出--*
    ,即它被Shell替换,所有文件和目录都在当前目录中。因此它应该放在子目录中。它对我很有用。但由于突出显示了语法“/”我认为它更干净。似乎我
     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)