1

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

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

很想从 git (从第一次提交)将文件返回到同一个本地文件夹中?

谢谢。

4

4 回答 4

5

由于您已提交,因此本地文件是否存在于您分支 HEAD 的文件系统中甚至都无关紧要,因为它是 Git 历史记录的一部分。要从较早的提交中检索文件,您可以尝试检查它:

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

abc123先前提交的 SHA-1 哈希值在哪里。如果您不知道SHA-1哈希是什么,只需git log从 bash 运行,并找到较早的提交以及该提交的哈希。

编辑:

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

git revert abc123

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

于 2019-03-28T15:32:22.883 回答
2
git reset --hard HEAD^

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

此时,您只需要推送到远程,--force如果您已经推送了先前的状态。

但是,如果您处于分离的 HEAD 状态,这将不起作用,您必须检查它(请参阅 Tim 的答案)。

于 2019-03-28T15:31:17.397 回答
2

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

  1. 创建一个恢复旧提交的新提交

    git revert HEAD
    git push
    
  2. 将您的分支重置为上一个提交。

    git reset --hard HEAD
    git push -f
    

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

于 2019-03-28T15:38:55.833 回答
1

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

于 2019-03-28T15:33:07.443 回答