You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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,正确流程如下:

  1. 在repository2的本地克隆中添加repository1为远程:
    git remote add repo1 [repository1地址]
    
  2. 拉取repository1的代码:
    git fetch repo1
    
  3. 合并或选择性迁移分支(以主分支为例):
    git merge repo1/main --allow-unrelated-histories
    
  4. 推送回repository2:
    git push origin main
    

内容的提问来源于stack exchange,提问作者zonbin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:35:56