git如何用本地仓库恢复到远程仓库

git仓库的迁移通常采用以下办法:

  git clone --bare https://github.com/exampleuser/old-repository.git
  cd old-repository
  git push --mirror https://github.com/exampleuser/new-repository.git

来进行还原
如果遇到只有本地clone的仓库,线上仓库已经无法访问
执行以下命令:

git push -mirror

则会遇到 deny updating a hidden ref 这样的报错
类似:

! [remote rejected] refs/pull/1/head -> refs/pull/1/head (deny updating a hidden ref)
! [remote rejected] refs/pull/1/merge -> refs/pull/1/merge (deny updating a hidden ref)

这个时候不要慌,采用以下办法也可以还原线上仓库
第一步:在线上创建一个空的仓库。
第二步:使用脚本

  cd repository
  # 检查仓库是否存在(如果不存在)
  if [ ! -d ".git" ]; then
        echo "error: no git file !"
        exit 1
  fi
  git push --set-upstream origin --all # 先把本地checkout的分支push上去
  repos=$(git remote show origin) # 获取本地仓库所有分支列表
  echo "$repos" | while
        read line; # 读取每一行的分支
  do
        if [[ "$line" == *"(use 'git remote prune' to remove)" ]]; then # 如果这一行的分支提示在线上仓库没有
            IFS=' ' read -ra ADDR <<< "$line" #对这一行的提示做空格分割
            result=${ADDR[0]#refs/remotes/origin/} #去除这一行提示的前面内容refs/remotes/origin/
            git push -f origin refs/remotes/origin/${result}:refs/heads/${result} #推送到线上仓库的origin下,具体的根据自己仓库路径来
        fi
  done

这一段可以写一个shell脚本,传入多个仓库路径,对多个仓库进行还原

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容