我有两个遥控器:上游和原点.上游是我无法推动的.起源是我自己的回购.如何从上游获取所有分支然后将它们推送到原点?我试过了:
git fetch upstream
git push --all origin
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
jos*_*ias 37
我只需要将一个存储库从 Bitbucket 复制到 GitHub,这些步骤假设您的远程名为 origin,所有分支和标签都将被复制:
git remote add neworigin url-to-new-remote
git push neworigin --tags refs/remotes/origin/*:refs/heads/*
Run Code Online (Sandbox Code Playgroud)
这样做的好处是您的工作副本中的文件不会被修改。
Nic*_*yre 30
您可能想尝试使用--mirror
选项克隆上游仓库,然后使用选项推送到新的远程--mirror
仓库
您将拥有以下流程:
git clone <upstream-repo-url/repo.git> --mirror
git remote add <your-remote-name> <your-remote-url/repo.git>
git push <your-remote-name> --mirror
Run Code Online (Sandbox Code Playgroud)
当您git push <REMOTE> --all
或git push <REMOTE> --tags
所有分支和标签将从您的本地历史记录推送到远程时。通过这种方式,如果您希望将push
所有分支和标签从远程(即origin)(不仅仅是您的本地历史记录)转移到另一个远程(即上游),请执行以下过程:
git fetch --prune
Run Code Online (Sandbox Code Playgroud)
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
Run Code Online (Sandbox Code Playgroud)
git fetch --all
Run Code Online (Sandbox Code Playgroud)
git remote add upstream <the-url-path-of-a-remote.git>
Run Code Online (Sandbox Code Playgroud)
push
所有分支和标签添加到新的远程:
git push --all upstream
git push --tags upstream
Run Code Online (Sandbox Code Playgroud)
git fetch --prune
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git remote add upstream <the-url-path-of-a-remote.git>
git push --all upstream
git push --tags upstream
Run Code Online (Sandbox Code Playgroud)
从一个(裸)存储库克隆到另一个(裸)存储库并采用所有分支(而不仅仅是签出的分支)的一个完整答案是克隆本地裸存储库作为中介。然后将所有分支作为克隆的一部分拉出,并且 git push --all 将全部推送它们。在 Windows 上从 github 到 gitlab 执行的示例:
结果:25 个分支推送到 gitlab
请注意,所有分支都不需要 git checkout 并且对裸仓库毫无意义。
akh*_*air -5
希望这可以帮助:
git remote add your-new-origin url-to-repo/repo.git
git push --all your-new-origin //pushes all branches
git push --tags your-new-origin //pushes all tags
Run Code Online (Sandbox Code Playgroud)