我将本地文件添加到 git repo ( git add .
) 并提交。
然后删除文件git rm *
并再次提交(第二次提交)。这在本地和远程都删除了文件。
很想从 git (从第一次提交)将文件返回到同一个本地文件夹中?
谢谢。
由于您已提交,因此本地文件是否存在于您分支 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 提交所做的任何事情。这应该使项目中的所有文件都处于早期状态。
git reset --hard HEAD^
将使您的分支返回一次提交并相应地更新工作树(恢复您的文件)。
此时,您只需要推送到远程,--force
如果您已经推送了先前的状态。
但是,如果您处于分离的 HEAD 状态,这将不起作用,您必须检查它(请参阅 Tim 的答案)。
如果您只提交已删除的文件,那么您至少有两个选择:
创建一个恢复旧提交的新提交
git revert HEAD
git push
将您的分支重置为上一个提交。
git reset --hard HEAD
git push -f
请注意,第二个选项是完全破坏性的。如果您在之前的提交中添加了任何其他更改,它也会撤消所有这些更改。此外,如果您与同一分支的其他团队成员一起工作,那么git push -f
会给他们带来问题。这应该只作为最后的手段,或者如果你确定你不会为其他人搞砸事情。
要返回提交git reset HEAD~1
,然后将其推送到原点git push -f origin branch_name