如何使用`git rm。'恢复意外删除的文件?

时间:2017-09-15 14:04:08

标签: git ubuntu

我刚刚做了一个舞台:

git add .

当我想重置时,我使用了:

git rm .

突然所有文件都被删除!!我认为它应该只是删除了树,它就像我一样:

rm -rf ./*

为什么要删除所有文件?我应该使用什么命令?

4 个答案:

答案 0 :(得分:3)

修复删除

当您从索引和工作树中删除文件时,git会注意到您当前提交中的文件现已消失,因此git status将显示这些文件已被删除。

然而,没有必要恐慌。这只是Git告诉你它看到那些文件与先前提交相比消失的方式。这些文件仍存在于仓库中。实际上,如果您现在暂存所有删除并提交,那么您只需要一个没有文件的新提交,但您当前的提交仍将与repo中的所有文件一起存在。您可以随时查看它,并将这些文件恢复到工作目录中。

this answer中提供了有关如何从git rm恢复文件的信息。

  

注意:小心:

git reset --hard
     

这将适用于这种情况(根据其他答案),但要小心一点 - 了解虽然它会将所有文件恢复到最后(当前)提交,这意味着您将丢失所有更改索引和工作目录。在这种情况下,您确实要恢复所有文件(因为git rm .已删除所有文件),因此这不是问题。

     

您可以使用

将单个文件还原到上次提交状态
git reset --hard [filename]


如何仅在将来从索引中删除文件

关于如何从暂存区域中删除文件 - 我更喜欢使用Git Extensions,这是一种流行的开源Git GUI工具。当你点击'#34; commit"按钮,它打开一个提交窗口,显示所有阶段和非阶段文件的任何更改,让你点击它们中的任何一个,看到变化的差异,并有按钮在工作目录之间移动它们索引。

但是如果你想要命令行选项,你可以使用这个命令:

git reset

将删除索引中的所有文件/更改(注意:没有句号!!)。此外,您可以使用:

git reset [filename]

只取消[filename](或文件名模式,如* .txt)。

这与使用git reset --mixed相同,并导致git将所有文件(或仅[filename])设置回当前提交时的状态。 --mixed选项仅重置索引,而不是工作目录,因此它不会删除文件中的任何更改,它只会使文件/更改无法执行。

如果您使用git reset --soft,则无法执行任何操作 - --soft不会重置索引或工作目录,因为您没有指定不同的内容分支或提交,它将使用现有索引和工作目录将所有文件重置为当前提交 - 这是您已经拥有的!

如果你使用git reset --hard那么它将清除索引和工作目录,并将文件恢复到当前提交的原始条件 - 它们将在没有更改的情况下被取消 - 这是一个解决方案修复删除问题。

答案 1 :(得分:2)

如果您想重置添加内容,则可以完成

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css" rel="stylesheet" />

<section id="slide-out" class="side-nav blue-grey lighten-4"><button>Send AJAX request</button></section>
<a href="#" data-activates="slide-out" class="button-collapse" style="display:none;"><i class="material-icons">menu</i></a>

<table class="responsive-table">
  <thead>
    <tr>
      <td>Name</td>
      <td>Place</td>
      <td>Animal</td>
      <td>Thing</td>
    </tr>
  </thead>

  <tbody>
    <!-- A Number Of Rows -->
    <tr class="table-row">
      <td>Bob</td>
      <td>Berlin</td>
      <td>Mouse</td>
      <td>TV</td>
    </tr>
    <tr class="table-row">
      <td>Luke</td>
      <td>Munich</td>
      <td>Giraffe</td>
      <td>Radio</td>
    </tr>
    <!-- A Number Of Rows -->
  </tbody>
</table>

在您执行git reset --hard 之前,它会让您回到状态,并且应该恢复已经消失的所有文件。

答案 2 :(得分:1)

尝试使用:

重置为上次提交

git reset HEAD --hard

答案 3 :(得分:-1)

所有这些重置对我均不起作用,这让我多么害怕!我的情况:我有一个空的存储库,并且进行了4次提交。我需要做的是在git rm生效之前进行特定的提交。因此,就我而言,如果上述方法不起作用,请尝试:

git log
git checkout <your-before-git-rm-commit>