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

4
我重命名了一个本地分支(非主分支),然后想要重命名远程分支(Atlassian stash托管的存储库)。
但是,无论我做什么,分支重命名都没有反映在远程上。
这是我所做的:
git branch SR1234
git checkout SR1234
git push --set-upstream origin SR1234
git add --all
git commit -m "...."
git push

然后重命名“current”分支

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上)都只能看到旧的分支名称。只有本地,我才能看到新的分支名称。

我该如何更改远程分支名称?


使用显式的push语法,包含完整的refspec:git push -u origin SR5678:SR5678 - knittl
3个回答

18

完整的本地和远程重命名分支的方法类似于:

# 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 将在检出时通过以下消息通知用户:

Your branch is based on '...', but the upstream is gone.

但是,如果用户没有在本地处理(手动处理)重命名,则在下一次 git push 时仍会将旧历史记录推送到远程分支。

因此,仅在确实需要避免问题或者假设在那之后没有人从原来的分支上拉取过代码,才应该远程重命名分支。


1
我认为问题是由于你的`.git/config`文件中的`branch.SR5678.merge`变量引起的。
重命名分支的步骤:
1) git branch -m SR5678
2) git push origin :SR1234
3) git push --set-upstream origin SR5678

所以在执行1和2命令后,你的本地分支名已经改变,但是merge变量仍然指向旧的分支名,就像下面这样:

[branch "SR5678"]
     remote = origin
     merge = refs/heads/SR1234

这个分支名称用于执行Push到或Pull自命令。因此,您的第三个命令仍将推送到旧的命名分支以供远程位置使用。
以下任何一个都可以用于解决方案:
[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

0

当您移动分支时,它仍然知道跟踪分支Sr1234。通过:BRANCH将无内容推送到分支时,您会删除远程上的该分支。

要在远程创建分支,您可以告诉它要推送到哪个分支。

git push --set-upstream origin SR5687:SR5687

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接