【问题标题】:Does each pull request create a separate remote branch?每个拉取请求是否创建一个单独的远程分支?
【发布时间】:2021-12-22 10:23:42
【问题描述】:

我不确定这是否特定于我正在使用的 repo (PyTorch) 或者它是否普遍适用,但似乎每次我提交拉取请求时,都会在 repo 上创建一个远程分支。这是否应该发生,如果发生,其背后的逻辑是什么?

如果你有自己的本地分支并不断提交和提交拉取请求,为什么不能都在同一个远程分支上进行?

【问题讨论】:

  • 你能发布你的确切命令和你看到的结果吗?
  • @Schwern 我会回来的。我不直接使用git push 进行pytorch 开发。有一个名为ghstackgithub.com/ezyang/ghstack 的内部工具,其中嵌入了推送和拉取请求。我刚刚找到了这个链接,目前正在浏览它,我认为实际上是这个工具创建了额外的远程分支(我原以为这是 github 的东西)。我正在尝试了解其背后的原因。
  • 我不知道您使用的工具,但是为每个 PR 创建一个新分支并不是一个坏习惯。如果您不希望这些分支之后继续存在,只需在合并 PR 后删除该分支。在我自己的工作流程中,我每次开始任何工作时都会创建一个新分支,并在合并该工作后将其删除。分支很便宜,您无需犹豫创建它们。我喜欢将它们命名为dev.brief-description-of-the-task,以便更容易弄清楚每个分支以后是什么。
  • @user5965026 "此工具将为堆栈上的每个提交推送并创建拉取请求。" 我想问题已得到回答。我已经看到过 Gerrit 等工具之前使用的这种单一提交分支流程。我不推荐它。虽然每个任务只需要提交一次肯定更简单,但它的用处也少得多。能够将一个任务分成多个提交是一个强大的开发工具; ghstack 把它拿走了。
  • 值得指出:“拉取请求”(见 GitHub)不是 Git 的一部分。它们是 GitHub 插件。其他托管站点也添加了类似的东西,但它们都有一些细微的不同,有些不称它们为“拉取请求”(例如,GitLab 将它们称为“合并请求”)。所以你学到的任何关于 GitHub PR 的细节都可能是 GitHub 特有的。

标签: github pull-request ghstack


【解决方案1】:

Github 拉取请求不会创建分支。您正在使用一个工具,ghstack,它确实如此。

正常的 Github PR 过程是从 master 上创建一个本地分支,在该分支上进行一些提交,将该分支推送到 Github,然后从该远程分支进行 PR。你创建分支,推送它,为它打开一个 PR。有关正常 PR 流程的更多信息,请参阅Collaborating with pull requests。这通常被称为Feature Branch Workflow。

ghstack 有自己的进程。

在 master 上准备一系列提交,然后运行 ​​ghstack。此工具将为堆栈上的每个提交推送和创建拉取请求。

例如,如果您在 master 上有三个本地提交,并且您运行 ghstack,它将为每个提交创建一个远程分支,并为每个提交创建一个 PR。这一切都是由 ghstack 完成的,而不是 Git 或 Github。这不是人们通常使用 Git 或 Github 的方式。这是一个特定于 ghstack 工具的进程。

单提交分支的优点是它使分支管理更简单。缺点是它失去了将工作分解为一组不同但相关的变化的能力;这就是一个分支,不同但相关的变化。

ghstack 似乎正在用提交的“堆栈”取代分支的概念。

在我看来 单次提交分支使代码更难审查,也使代码更难理解。提交要么很大且难以审核,要么很小且难以理解它们之间的关系。

【讨论】:

    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多