git恢复删除后没有提交的已删除文件

我删除了一些文件。

我还没有承诺。

我想重置我的工作区以恢复文件。

我做了一个git checkout .

但删除的文件仍然缺失。

git status表示:

# On branch master# Changes to be committed:#   (use "git reset HEAD <file>..." to unstage)##   deleted:    cc.properties#   deleted:    store/README#   deleted:    store/cc.properties#

为什么git checkout .不将工作区重置为HEAD

741966 次浏览

输出告诉你需要做什么。git reset HEAD cc.properties等。

这将取消执行rm操作。之后,再次运行git status将告诉您需要执行git checkout -- cc.properties才能取回文件。

更新:我的配置文件中有这个

$ git config alias.unstagereset HEAD

我通常用它来卸载东西。

您已执行删除操作,因此需要执行以下操作:

git checkout HEAD cc.properties store/README store/cc.properties

git checkout .仅从已暂存删除的索引中签出。

由于您正在执行git checkout .,因此看起来您正在尝试将分支恢复到上次提交状态。

你可以用git reset HEAD --hard来实现它

警告

这样做可能会删除所有最新的修改并取消您的修改,例如,您可能会丢失工作。它可能是您想要的,但请查看的文档以确保。

只是做git checkout path/to/file-I-want-to-bring-back.txt

这是在我的mac上帮助我的命令。我尝试了一些其他解决方案,但它们不适合我。

OSX Mavericks上的Git版本

mac-pro:main chris$ git versiongit version 1.8.5.2 (Apple Git-48)

命令

git checkout HEAD -- path/to/file/file.cc

要一次自动恢复所有未上演删除,无需指定每个路径:

git ls-files -z -d | xargs -0 git checkout --

要一次自动恢复所有上演删除,无需指定每个路径:

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --

如果您已经安装了ToroiseGIT,那么只需选择父文件夹弹出菜单的“恢复…”菜单项。

如果您想一次恢复所有文件

记住使用句点,因为它告诉git抓取所有文件。

此命令将重置头部并取消所有更改:

$ git reset HEAD .

然后运行它来恢复所有文件:

$ git checkout .

然后做一个git状态,你会得到:

$ git statusOn branch masterYour branch is up-to-date with 'origin/master'.

如果你没有提交任何更改,你所要做的就是隐藏这些更改,你将回到最后一个工作提交。

git stashgit stash cleargit clean
git checkout HEAD -- client/src/pp_web/index.cljs

如果您正在寻找已删除的目录。

 git checkout ./pathToDir/*

在寻找有关如何取消删除从另一个分支合并后在我的工作目录中删除的文件的答案时发现了这篇文章。合并后尚未提交。因为这是一个正在进行的合并,我不能只是添加它回来使用:

$ git reset <commitid#-where-file.cpp-existed> file.cpp

除了重置之外,我还必须做另一个步骤来恢复文件:

$ git checkout -- file.cpp

如果您使用

git rm filename

然后删除一个文件

git checkout path/to/filename

不起作用所以在这种情况下

git checkout HEAD^ path/to/filename

应该起作用

对我来说,工作是git checkout {SHA1 of commit with version to restore} "{path to file to restore}"

例如git checkout 5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(在我们希望文件进入的分支中执行)

该命令执行后,恢复的文件将存在于原始位置(需要编译)

你可以看到这个

这适用于你使用

git checkout -- .

在你做某事之前。

您可能还想摆脱尚未创建的已创建文件。您不想要它们。有:

git reset -- .

我遇到了同样的问题,但上述解决方案都不适合我。我最后做的是:
-创建一个同名的空文件
-将此文件与其本地历史记录进行比较
-将历史记录复制到空文件。

1.使用以下方法找到要恢复的特定提交:

   git logThis command will give you a list of commits done by you .

2.使用以下方式恢复该提交:

    git revert <commit id>

现在您的本地分支机构将特别拥有所有文件

注意:首先提交您希望保留的任何工作。

您可以重置您的工作区(并恢复已删除的文件)

git checkout ./*

使用git ls-files签出已删除(-d)或已修改(-m)的文件。

git checkout $(git ls-files -d)

如何仅恢复git签出上修改的文件?

我有同样的问题,这里我尝试的答案都不适合我。我正在使用Intellij,我已经签出了一个新的分支git checkout -b minimalExample,通过删除项目中的一堆文件和修改一堆其他文件,在某个问题的新分支上创建了一个“最小示例”。不幸的是,即使我没有在新的“最小示例”分支上提交任何更改,当我再次签出我的“原始”分支时,“最小示例”分支的所有更改和删除也发生在“原始”分支中(或者看起来如此)。根据git status,删除的文件只是从两个分支中消失了。

幸运的是,即使Intellij警告我“删除这些文件可能无法完全恢复”,我也能够通过右键单击项目并选择本地历史>显示历史(然后在我想要的最新历史项目上恢复)来恢复它们(在实际删除这些文件的最小示例分支上)。Intellij恢复“最小示例”分支中的文件后,我将分支推送到源。然后我切换回我的“原始”本地分支并运行git pull origin minimalExample将它们也带回“原始”分支。

以下是不同的案例,作为帮助他人的参考:

如果删除没有犯下,下面的命令将恢复工作树中已删除的文件。

$ git checkout -- <file>

您可以使用下面的命令在工作树中获取所有已删除文件的列表

$ git ls-files --deleted

如果删除为被犯下,请找到发生的提交,然后从该提交中恢复文件。

#find the commit hash where it had this file deleted$ git rev-list -n 1 HEAD -- <file>

它应该会给你类似于c46e81aa403ecb8a0f7a323a358068345的东西,现在将这个提交哈希与父运算符(^)一起使用,如下所示:

$ git checkout <commit>^ -- <file>

示例:

$ git checkout c46e81aa403ecb8a0f7a323a358068345^ -- <file>

如果您正在查找要恢复的文件的路径,以下命令将显示所有已删除文件的摘要。

$ git log --diff-filter=D --summary

如果您只想显示文件列表:

git log --diff-filter=D --summary | grep "delete mode"

较新的git(我的是2.27.0)更友好,实际命令显示在“git状态”期间。例如,如果您删除了文件tf. c,则

$ git status...Changes not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)deleted:    tf.c

你可以使用“git恢复tf. c”来找回它,因为它saz。不再搜索!

这对我来说是最简单的方法:

git checkout HEAD~1 path/to/myfile.rb

找到了这里


另一种方式也为我工作:

git reset HEAD path/to/myfile.rbgit restore path/to/myfile.rb

我碰巧在同一个存储库中将一些json文件从一个文件夹移动(而不是复制)到另一个文件夹。然后我重命名了这些文件并更改了新位置的一些内容。然而,我很快发现我没有复制并完全删除以前位置的文件。

简单的解决方案:

git reset HEAD <oldfilepath_which_was_moved>git restore <oldfilepath_which_was_moved>

对所有文件都这样做了,它们又回来了。

您还可以包含由空格分隔的多个文件。

git reset HEAD file_1_path file_2_path file_3_path

简单修复,顺便说一句,这不会更改/删除新文件。

情境:一个人删除了一个文件但没有提交

如果一个人删除了一个文件,并立即意识到这是一个错误?这个很简单,只需执行:

git checkout HEAD <filename>

如果是文件夹,只需:

git checkout HEAD <foldername>/

参考:https://www.git-tower.com/learn/git/faq/restoring-deleted-files

一种没有任何风险的解决方案是转到您的存储库页面(在github等上)并手动下载已删除的文件。

对于任何在运行git checkout时获得未知版本或路径不在工作树中的人

运行git reset fileToRestore

然后git checkout fileToRestore

您的文件将被恢复

您可以使用git-restore一次性取回文件。

如果您没有像这样提交删除:

➜  learning git:(daily) ✗ git statusChanges to be committed:(use "git restore --staged <file>..." to unstage)deleted:    feelings/articles/2022/1/assets/20220109_093659_image.pngdeleted:    feelings/articles/2022/1/assets/20220109_094525_image.pngdeleted:    feelings/articles/2022/1/assets/20220109_100231_image.pngdeleted:    feelings/articles/2022/1/assets/20220109_100251_image.pngdeleted:    feelings/articles/2022/1/assets/20220109_100321_image.pngdeleted:    feelings/articles/2022/1/assets/20220109_101009_image.png

您可以使用类似的东西来恢复您的文件:

git restore --worktree --staged feelings/articles/2022/1/assets

-W,--worktree,-S,--分阶段
指定还原位置。如果这两个选项都没有指定,默认情况下会还原工作树。指定--分阶段只会还原索引。指定两者都会恢复两者。