在拉取请求时重命名分支

Posted

技术标签:

【中文标题】在拉取请求时重命名分支【英文标题】:Renaming a branch while on pull request 【发布时间】:2013-11-29 05:30:56 【问题描述】:

在 Github 上,您可以提出拉取请求以向项目添加功能。一个人的贡献必须在一个分支上,如果请求被接受,它将被合并到项目的主分支(或类似的分支)中。

现在,我在 Github 上提交了一个拉取请求,我的贡献位于一个名为 patch-1 的分支上。我可以通过

在本地修改分支的名称
git branch -m patch-1 newname

原则上,我也可以按照this answer 中的说明在 Github 上的分叉存储库中重命名它。这实际上是通过删除旧分支 patch-1 在我的例子中完成的,并用不同的名称重新推送它 newname

当它构成拉取请求时,是否允许在我的 Github 上的分叉存储库上重命名分支 patch-1? 还是会导致拉取请求管理出现问题?

当分支是拉取请求时,有什么方法可以重命名 Github 上的分叉存储库上的分支?

【问题讨论】:

现在更容易做到(自 2021 年 1 月起)。见my answer below 【参考方案1】:

“重命名”git 中的远程分支,如您提供的链接所示,实际上只是删除一个分支,然后推送一个具有相同提交哈希但新名称的新分支。如果您为分支补丁 1 打开了拉取请求,当您删除该分支时,拉取请求将被关闭。

因此,不,您不能在打开拉取请求的情况下重命名分支,而无需删除分支并移除拉取请求。但是,没有什么能阻止你这样做,用新名称推送一个新分支,并创建一个新的拉取请求。

【讨论】:

不这样做的一个原因是失去了对现有 PR 的讨论。 我不明白为什么对 PR 上的源分支重命名有如此严格的限制。 bitbucket 中存在同样令人讨厌的行为。另一种方法是编辑 PR 并将源分支更改为另一个分支。有人可能会说“如果您更改源分支,那么无论如何它都是一个新的 PR”。从技术上讲,是的,但也没有什么能阻止开发人员从完全不同的分支设置上游,然后执行git push -f。 PR 更新了一个全新的代码,仍然是“相同”的 PR。【参考方案2】:

更新(2021 年 10 月):

查看this answer

原始答案(2018 年 1 月):

简答:

没有

替代方法:

    用一个新的(重命名的)分支打开一个新的 PR 关闭引用新 PR 的旧 PR(例如,关闭以支持 #new_pr_id) 修改新 PR 的描述(例如取代 #old_pr_id) (可选)对旧PR的相关讨论发表评论

注意:

需要更改远程分支的名称(构成 PR),因为构建系统需要以票证 ID 结尾的分支名称。然而,公关在正式创建票之前(来自规范)开放,并包含了有价值的讨论。所描述的方法是使构建系统工作的唯一方法,并且不会丢失任何信息(尽管有一个额外的步骤来跟踪它)。

【讨论】:

鉴于分支通常在合并后被删除,我认为“容忍”名称不准确比添加引用旧 PR 的新 PR 的开销更好跟踪历史讨论。 关于“更新”答案:我认为 OP 的意图是更改“来自”分支,而不是基础分支。我不明白这会有什么帮助。 @SlobodanIlic 你能删除以下过时的评论吗?***.com/questions/20007578/… «分支通常在合并后删除»所以最终重要的是合并提交,仍然说类似Merge pull request #999 from wip-experimental-branch-try-something,即使在那时,它已经过良好测试并且不再是实验性的。【参考方案3】:

简答:

对于目标分支是。自 2021 年 1 月起

详情

参见“Support for renaming an existing branch”。

“How do I rename branch on the GitHub website?”中的详细信息。

来自github/renaming,这将重新定位任何打开的拉取请求。

charlie Harding 在 cmets 中添加:

“将更新 4 个针对此分支的拉取请求”意味着它将更改拉取请求想要合并到的分支。 无论如何,这在以前是可以通过那些 PR 的页面实现的。 另一方面,尝试重命名作为 PR 来源的分支会导致该 PR 被关闭(“将关闭该分支的 1 个打开的拉取请求。”)。

作为Michael Freidgeim 添加the comments:

github.community中有支持重命名基础分支的请求。

【讨论】:

这是为了重命名拉取请求的错误结尾。 “将更新 4 个针对此分支的拉取请求”意味着它将更改拉取请求想要合并到的分支。无论如何,这在以前是可以通过那些 PR 的页面实现的。另一方面,尝试重命名作为 PR 来源的分支将导致该 PR 被关闭(“将关闭该分支的 1 个打开的拉取请求。”)。 @CharlieHarding 谢谢。我已相应地修改了答案,并将您的评论包含在所述答案中以提高知名度。 github.communitygithub.community/t/update-pull-requests-from-renamed-branch/…987654329@有一个支持重命名base分支的请求 @MichaelFreidgeim 谢谢。我已将您的评论包含在答案中以提高知名度。

以上是关于在拉取请求时重命名分支的主要内容,如果未能解决你的问题,请参考以下文章

Git-TFS - 如何在拉取请求被批准之前确保分支是最新的?

Git在拉取请求分支上恢复樱桃选择而不在主控上恢复

注销时重命名文件

平滑运算符:在写入文件时重命名文件

[重命名应用程序中的树节点时重命名文件夹名称

核心数据:在获取时重命名属性