强制推送后如何取回已删除的文件

How to get back deleted files after forced push

我试图解决一个我无法解决的问题 。似乎有一个文件导致了问题。我 运行 git push -f origin master 现在远程仓库 (Bitbucket) 中的大部分文件都不见了。我如何让他们返回此提交历史记录?我试过 git revert HEAD~1 但没有用(它更改了 1 个文件但没有恢复任何文件)。我 运行 git log 并且我可以在那里看到我所有的提交,所以我想 git 在某种意义上仍然知道它们 - 我非常不明白 git.

当你强制将本地 master 分支推送到原点时,你基本上强制远程分支与本地分支相同。

如果文件在 Bitbucket 上丢失,这意味着它们在您的本地分支上也丢失了。 所以首先,在你本地的 master 分支上解决这个问题,然后再强制推送它。

运行 git log 只会向您显示属于您的分支的提交。如果缺少某些文件,您可能看不到这些提交。

运行 git reflog 将为您提供完整的历史记录,包括在分支、合并和变基之间切换。

使用 reflog 来识别您的 'last known good' 提交。一旦你找到它 - 标记它(只是为了更容易找到)并开始一个分支。

然后您可以将此分支与 master 分支进行比较,并确保它是您正在寻找的提交。

更新

获得提交哈希后,将您的主分支重置为它并强制推送:

git reset --hard <hash>
git push --force origin master