我重命名了一个本地分支(非master),然后想重命名远程barnch(Atlassian stash托管存储库)。
但是,无论我做什么,分支重命名都不会反映在遥控器上。
这就是我做的事情
git branch SR1234
git checkout SR1234
git push --set-upstream origin SR1234
git add --all
git commit -m "...."
git push
然后重命名为“当前'分支
git branch -m SR5678
然后尝试重命名远程
上的分支git push origin :SR1234
$ git push origin :SR1234
To ssh://<repo>.git
- [deleted] SR1234
$ git push --set-upstream origin SR5678
Total 0 (delta 0), reused 0 (delta 0)
To ssh://<repo>.git
* [new branch] SR5678 -> Sr1234
Branch SR5678 set up to track remote branch SR1234 from origin.
麻烦的是,在远程(在atlassian stash上托管),无论我做什么,我都会看到旧的分支名称。只有本地,我看到新的分支名称。
如何更改远程分支名称?
答案 0 :(得分:16)
在本地和远程重命名分支的完整方法如下:
# rename it locally
git branch -m old-name new-name
# push the new one remotely
git push --set-upstream origin new-name
# delete the old one remotely
git push origin :old-name
但......
这样做,如果有多个人正在处理回购,您必须告知所有工作人员您的更改。如果没有,他们可以通过推送他们的本地历史(仍然包含其参考)来重新创建旧分支:
# hardly refresh a local clone if possible
git fetch --prune --all
如果无法完成本地更新(例如,本地分支与原始分支的名称不同),git会在结帐时通知用户,消息如下:
您的分支基于'...',但上游已经消失。
但如果用户没有在本地(和手动)处理重命名,它仍然会在下一个git push
推送旧历史记录。
所以你应该远程重命名分支,如果真的需要避免问题,或者你只是推动了原来的分支(假设从那时起没有人拉出来)。
答案 1 :(得分:1)
我认为问题是由于您的.git/config
文件的branch.SR5678.merge
变量而导致的。
您重命名分支的步骤
1) git branch -m SR5678
2) git push origin :SR1234
3) git push --set-upstream origin SR5678
所以1&amp; 2个命令,您的本地分支名称已更改,但merge
变量仍引用较旧的分支名称。如下所示:
[branch "SR5678"]
remote = origin
merge = refs/heads/SR1234
此分支名称用于命令的Push
或Pull
。因此,您的第3个命令仍然会进入远程位置的旧命名分支。
以下任何一种都可以用于解决方案:
[1]
git branch -m SR1234 SR5678
git push origin :SR1234
git push -u origin SR5678:SR5678
[2]
git branch -m SR1234 SR5678
git push origin :SR1234
git push --set-upstream origin SR5678:SR5678
[3]
git branch -m SR1234 SR5678
git push origin :SR1234
git config branch.SR5678.merge refs/heads/SR5678
git push -u origin SR5678
答案 2 :(得分:0)
当您移动分支时,它仍然知道跟踪分支Sr1234
。当您通过:BRANCH
将任何内容推送到分支时,您将删除该分支上的该分支。
要在遥控器上创建分支,您可以告诉您想要推送哪个分支
git push --set-upstream origin SR5687:SR5687
作为移动旧分支的一部分,删除远程存储库中的旧名称可能是个好主意,因为您似乎不再需要了。