执行git push --mirror后覆盖GitHub仓库代码,如何恢复?
如何恢复被
git push --mirror覆盖的Git仓库内容 - 先确认远程Git服务器是否保留引用日志(reflog):大部分主流托管平台(GitHub、GitLab、Gitee等)默认会保留90天内的废弃分支和提交记录。
- 克隆当前的repository2到本地:
git clone [repository2地址] cd repository2 - 查看远程仓库的引用日志,找到覆盖操作前的提交哈希:
输出里会出现类似条目:git reflog show origin/main # 如果主分支是master,替换成origin/master
其中def5678 HEAD@{1}: push --mirror: fast-forward abc1234 HEAD@{2}: commit: 覆盖前的最后一次提交abc1234就是覆盖前主分支的最后一个有效提交哈希。 - 强制将旧提交推回主分支:
git push origin abc1234:main --force # 分支名根据实际情况替换 - 其他被覆盖的分支,重复上述步骤:查看对应分支的reflog(比如
git reflog show origin/dev),找到旧提交后强制推送回去。 - 如果远程服务器没有reflog,检查本地是否有repository2的旧克隆版本:如果有,直接从本地旧克隆推送对应分支到远程即可。
- 若以上方法都无效,联系托管平台客服,部分平台会保留仓库快照备份,可申请恢复。
后续操作建议
以后迁移代码到已有内容的仓库时,绝对不要用git push --mirror,正确流程如下:
- 在repository2的本地克隆中添加repository1为远程:
git remote add repo1 [repository1地址] - 拉取repository1的代码:
git fetch repo1 - 合并或选择性迁移分支(以主分支为例):
git merge repo1/main --allow-unrelated-histories - 推送回repository2:
git push origin main
内容的提问来源于stack exchange,提问作者zonbin
相关产品推荐
相关产品推荐

