不删除远程分支的情况下重命名远程分支

15

我需要你的帮助来重命名一个远程分支。
我创建了一个PR,但现在我需要重命名远程分支名称。
我不想遵循重新命名本地分支然后推送和删除旧分支的过程,因为这将清除PR。
是否有一种方法只重命名远程分支,而PR应该保持不变。谢谢。


2
据我所知,这可能是不可能的,但在此帖子中提到了一种替代方法:https://dev59.com/FmIj5IYBdhLWcg3wrG4q - Fareed Khan
2个回答

19
在Git中重命名远程分支实际上就是创建一个新分支,它具有相同的提交记录和新名称,并删除旧分支。根据您打开拉取请求的位置(您没有提到是Github、Gitlab、Phabricator还是其他工具),您可能会得到一些由本地操作存储库的工具提供的选项。我只能说对于Github来说,他们的界面中没有重命名分支的选项,也没有在拉取请求中更改“比较”分支的选项。
对于Github最好的解决方案可能是创建一个新的分支和新的拉取请求,在旧拉取请求中发表一条评论,指出它被“关闭以支持#NEW”,并将其“继续#OLD”到新拉取请求中。然后删除旧分支,这也将关闭旧拉取请求。
用于删除旧分支创建具有相同内容的新分支的快速单行命令是:
git push <remote> <remote>/<old>:refs/heads/<new> :<old>

其中remote是显而易见的——例如,起点,oldnew分别是旧分支和新分支的名称。


1
当你说“创建一个具有相同提交的新分支”时,这是否意味着具有相同哈希的相同提交,还是在新分支上将它们作为新提交与相同内容(就像使用cherry-pick一样)?我试图理解如果在Bitbucket中重命名分支是否会创建新的提交以便在实际提交之前使用您的命令进行审查。 - flipdoubt
2
@flipdoubt,同样的哈希值,基本上操作就是将旧分支名称检出为新分支名称(以便这些分支具有相同的历史记录),然后删除旧的分支。 - blami
为什么需要refs/heads/前缀?省略它会提示我需要它。 - lucidbrot

1

我不想按照流程重命名本地分支,然后推送并删除旧分支。

我认为没有其他方法。你可以尝试在PR界面更改分支,但我想你已经尝试过了。

Pull或Merge请求不是Git本身的一部分,而是托管服务(如GitHub或BitBucket)的功能。由于它是一个标准,因此实现完全取决于系统。


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