Git 恢复文件

Git recover files

我将本地文件添加到 git 存储库 (git add .) 并提交。

然后用 git rm * 删除文件并再次提交(第二次提交)。删除本地和远程文件。

如何将文件从 git(从第一次提交)恢复到同一个本地文件夹?

谢谢。

git reset --hard HEAD^

将使您的分支恢复一次提交并相应地更新工作树(恢复您的文件)。

此时您只需要推送到远程,如果您已经推送了之前的状态,则使用 --force

但是,如果您处于分离的 HEAD 状态,这将不起作用,您必须检查一下(参见 Tim 的回答)。

自从您提交后,本地文件是否存在于您分支机构 HEAD 的文件系统中甚至都无关紧要,因为它是 Git 历史的一部分。要从较早的提交中检索文件,您可以尝试将其签出:

git checkout abc123 -- path/to/some/file.ext

其中 abc123 是早期提交的 SHA-1 哈希值。如果您不知道 SHA-1 哈希是什么,只需从 bash 中找到 运行 git log,然后找到较早的提交以及该提交的哈希。

编辑:

如果您真的想将整个分支恢复到某个较早的提交,那么通常安全的方法是通过 git revert。所以,继续上面的例子,如果你想恢复最新的提交 abc123,你可以尝试:

git revert abc123

这将在您的分支之上添加一个 new 提交,但是这只会在功能上撤消之前的 HEAD 提交所做的任何事情。这应该使您项目中的所有文件保持其早期状态。

返回提交 git reset HEAD~1然后将其推送到源 git push -f origin branch_name

如果您只提交已删除的文件,那么您至少有两个选择:

  1. 创建一个还原旧提交的新提交

    git revert HEAD
    git push
    
  2. 将您的分支重置为之前的提交。

    git reset --hard HEAD
    git push -f
    

    请注意,第二个选项是完全破坏性的。如果您在之前的提交中添加了任何其他更改,它也会撤消所有这些更改。此外,如果您与同一个分支上的另一个团队成员一起工作,那么 git push -f 会给他们带来问题。 这应该只作为最后的手段使用,或者如果您确定不会给其他人带来麻烦。