Git分支重命名(非主) - Atlassian Stash

时间:2015-07-06 16:23:07

标签: git

我重命名了一个本地分支(非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上托管),无论我做什么,我都会看到旧的分支名称。只有本地,我看到新的分支名称。

如何更改远程分支名称?

3 个答案:

答案 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

此分支名称用于命令的PushPull。因此,您的第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

作为移动旧分支的一部分,删除远程存储库中的旧名称可能是个好主意,因为您似乎不再需要了。