在拉取请求时重命名分支

174
在Github上,你可以发起拉取请求来为项目添加功能。你的贡献必须在一个分支上,如果该请求被接受,将会被合并到项目的主分支(或类似的分支)中。
现在,我在Github上提交了一个拉取请求,我的贡献在一个名为patch-1的分支上。我可以通过本地修改分支名称来...
git branch -m patch-1 newname

原则上,我也可以按照这个答案中的说明,在我的Github分支上重命名它。实践中,这是通过删除旧分支(在我的情况下是patch-1),然后使用不同的名称newname重新推送它来完成的。

如果分支patch-1作为拉取请求存在,那么是否允许在我的Github分支上重命名它? 这会导致拉取请求管理方面的问题吗?

当分支是拉取请求时,有没有办法在Github分叉存储库上重命名它?


4
自2021年1月以来,这现在变得更加容易做到了。请参见下面我的答案 - VonC
1
@VonC,不完全正确。那是关于重命名目标分支(即将master重命名为main将更新所有针对master的PR以现在针对main)。这里的OP询问如何重命名PR的源分支。尽管Github在网站上有一个“重命名功能”,但没有任何警告,当您这样做时,它将关闭您的PR,因为重命名时将删除您的原始分支。 - Abel
2
@Abel 是的,我相信我的回答下面的第一条评论也提到了同样的事情。这还没有可用。 - VonC
3个回答

168
在git中,“重命名”一个远程分支,就像你提供的链接所示,实际上只是删除一个分支,然后推送一个具有相同提交哈希但具有新名称的新分支。如果您为分支patch-1打开了拉取请求,则在删除该分支时,拉取请求将被关闭。
因此,在打开拉取请求的情况下不能重命名分支而不删除该分支和移除拉取请求。然而,没有什么阻止您这样做,即删除分支并创建一个具有新名称的新分支,然后创建一个新的拉取请求。

284
不这样做的一个原因是会失去有关现有公共关系的讨论。 - Johnny Everson
26
我不理解为什么在PR中重命名源分支要受到如此严格的限制,Bitbucket中也存在同样令人烦恼的行为。另一种方法是编辑PR并将源分支更改为另一个分支。有人可能会说,“如果您更改了源分支,则无论如何都是新的PR”。从技术上讲,没错,但也没有任何防止开发人员从完全不同的分支设置上游然后执行git push -f。 PR已更新为全新代码,但仍是“相同”的PR。 - L. Holanda
@L.Holanda 这种严格的限制是有道理的:当你重命名一个分支时,实际上是在改变讨论的主题,因此应该从全新的角度开始新的讨论。考虑将 small-cosmetic-changes 重命名为 fix-nasty-security-bug - 应该从完全不同的角度、可能由不同的利益相关者来审查 PR。分支的名称确实是一个话题的名称。 - Jaredo Mills
@L.Holanda 这种严格限制是有道理的:当你重命名一个分支时,实际上是改变了讨论的主题,因此应该开始一个关于新主题的新讨论。考虑将 small-cosmetic-changes 重命名为 fix-nasty-security-bug - 对于这个 PR 的审查应该从完全不同的角度进行,可能由不同的利益相关者来进行。分支的名称,确实是一个主题的名称。 - undefined
11
small-cosmeitc-changes重命名为small-cosmetic-changes怎么样?或者将fix-nasty-security-gub改为fix-nasty-security-bug?对于那些稍后可以手动完成的事情,强制实施严格限制是没有意义的。最好提供两个选项作为配置,让存储库管理员决定。我的例子中使用的git push -f已经说明了一切,即使比重命名分支更糟糕,但仍然被允许。 - L. Holanda

55

更新(2021年10月):

查看此回答

原始回答(2018年1月):

简短回答:

不行

替代方案:

  1. 用新的(重命名后的)分支开启一个新的PR
  2. 关闭旧的PR,并引用新的PR(例如关闭:#new_pr_id)
  3. 修改新的PR描述(例如替换:#old_pr_id)
  4. (可选步骤)对旧的PR中相关讨论进行评论

注意:

由于构建系统需要以票证号结束的分支名称,而远程分支(构成PR)的名称需要更改。但是,在正式票证创建之前(根据规范),该PR已经包含了有价值的讨论。所述方法是唯一使构建系统工作的方式,同时又不会丢失任何信息(虽然在跟踪信息时需要多出一步)。


12
通常在合并后会删除给定的分支,我认为容忍名称一段时间不准确比为了追踪历史讨论而添加一个引用旧 PR 的新 PR 而增加额外工作量更好。 - Neo
2
关于“更新”答案:我认为OP的意图是更改“from”分支,而不是基本分支。我不知道这会如何有所帮助。 - David Cook
2
@SlobodanIlic,您能否删除以下过时的评论?https://stackoverflow.com/questions/20007578/renaming-a-branch-while-on-pull-request#comment112870327_20007578 - Jaime Hablutzel
1
“分支通常在合并后被删除”,最终重要的是合并提交,它仍然会显示类似于“从wip-experimental-branch-try-something拉取请求#999进行合并”的内容,尽管此时已经经过了充分的测试并且不再是实验性的。 - user2394284

30

简短回答:

是的,适用于目标分支。自2021年1月起。

详情

请参阅“支持重命名现有分支”。

rename branch dialog -- https://i2.wp.com/user-images.githubusercontent.com/2503052/105069955-a231fa80-5a50-11eb-982c-a114c9c44c57.png?ssl=1

在 "GitHub 网站上如何重命名分支" 中有详细信息。
github/renaming,这将重新定位任何打开的拉取请求。
正如 Charlie Harding 在评论中所说:
  • "将更新 4 个针对此分支的拉取请求" 意味着它将更改拉取请求希望合并到的分支。
    以前可以通过这些 PR 页面进行此操作。
  • 另一方面,试图重命名作为 PR 源的分支将导致该 PR 被关闭("将关闭 1 个打开的拉取请求以供此分支使用。")。

正如Michael Freidgeim评论中所说:

有一个要求支持在github.community中重命名基础分支。


39
这段内容是关于重命名一个拉取请求错误端的说明。"将更新4个针对此分支的拉取请求"意味着它将更改拉取请求想要合并到的分支。此前,通过这些拉取请求的页面也可以实现这一点。另一方面,试图重命名作为PR源的分支将导致该PR被关闭(“将关闭1个有待处理的针对此分支的拉取请求”)。 - Charlie Harding
1
@CharlieHarding 谢谢。我已经相应地修改了答案,并将您的评论包含在答案中以增加可见性。 - VonC
2
有一个请求支持在github.community中重命名基础分支 https://github.community/t/update-pull-requests-from-renamed-branch/157676/3 - Michael Freidgeim
@MichaelFreidgeim 謝謝你。我已經將您的評論納入答案以增加可見度。 - VonC
@MichaelFreidgeim很不幸,github社区的讨论链接已经失效了... 你能否找回它? - Michele
1
@Michele,我已经编辑了答案并恢复了社区讨论链接。 - VonC

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