我有一个指向遥控器的存储库,现在我创建了一个新的遥控器,例如原始网址已使用git remote set-url origin myNewRemote
进行了更改。然后我做了一个git push
,但由于push只推送本地分支,我仍然需要将远程分支推送到新的远程分支。我知道这不是练习,但我现在要做的就是告诉新遥控器"嘿,这里是你应该知道的远程分支机构"然后我将通过正常的Git工作流程,在那里我创建本地分支/跟踪并将其推送到遥控器但是现在我正处于过渡期以回到我移动到新遥控器之前的状态。
我记得做过这样的事情:
git push origin refs/remotes/*:refs/heads/*
但它们被错误地创建,所以我将原点附加到分支名称,所以我很确定上面的命令(X:Y部分)不完全正确,有人可以帮助正确的我不必先在本地创建所有分支机构吗?
donnib
答案 0 :(得分:3)
你记得:
git push origin refs/remotes/*:refs/heads/*
非常接近。由于新旧 remote
名称均为origin
,因此远程跟踪分支 - refs/remotes/
下的这些名称 - 具体位于refs/remotes/origin/
子名称空间,您也想丢弃额外的origin/
。因此你想要的是:
git push origin "refs/remotes/origin/*:refs/heads/*"
(我在这里添加引号作为对抗shell的保护设备,它们喜欢在*
字符上吃早餐。:-)更严重的是,shell规则为*
这样的全局字符并且?
和[a-z]
等等有点复杂,像sh
和bash
这样更明智的shell会在未更改的上传递它们,如果它们没有文件匹配,但是当您实际拥有名为refs/remotes/origin/foo:refs/heads/bar
的文件时,这会导致偶然的问题。)