如何无需检出本地分支,将Git远程所有分支推送到另一远程?
如何将Git一个远程的所有分支推送到另一个远程(无需本地检出)
我来帮你搞定这个问题——你之前用git push origin2 --all没效果,是因为这个命令只会推送本地已经创建的分支,而你的本地只有master,那些feature1/2/3都只是远程追踪分支(存在于remotes/origin/下),不会被--all识别。
要实现把origin的所有远程分支推送到origin2,你需要用Git的refspec语法来直接指定要推送的分支映射,无需在本地检出任何分支。
核心命令
直接在你的本地仓库(也就是示例中的/project2)执行这条命令:
git push origin2 'refs/remotes/origin/*:refs/heads/*'
命令解释
refs/remotes/origin/*:匹配origin远程下的所有远程追踪分支(比如remotes/origin/feature1、remotes/origin/master等)::分隔符,左边是源分支,右边是目标分支refs/heads/*:将源分支推送到origin2远程的对应分支(也就是在origin2仓库中创建同名的本地分支,远程仓库的分支本质就是它的本地分支)
验证效果
执行完命令后,你会看到类似这样的输出:
# * [new branch] origin/feature1 -> feature1 # * [new branch] origin/feature2 -> feature2 # * [new branch] origin/feature3 -> feature3 # * [new branch] origin/master -> master
然后去/project3(也就是origin2对应的仓库)查看分支:
cd ${project3_dir} git branch -a # * master # feature1 # feature2 # feature3 # remotes/origin/HEAD -> origin/master # remotes/origin/master
可以看到所有从origin来的分支都已经推送到origin2了。
补充说明
- 如果只想推送特定分支,比如只推以
feature开头的分支,可以修改refspec:git push origin2 'refs/remotes/origin/feature*:refs/heads/feature*' - 这条命令是一次性操作,如果之后
origin有新分支,需要再次执行该命令来同步到origin2。
内容的提问来源于stack exchange,提问作者useless
相关产品推荐
相关产品推荐

