首页 > 解决方案 > 来自我自己仓库的相同分支的 Git 拉取请求的含义

问题描述

我是 Git 的初学者,但我熟悉许多基础知识和命令。

我有一个项目,其 git 历史如下所示:

* a1b2c3 (HEAD -> main) Merged develop/new-update into main
|
|    * b2c3d4 (develop/new-update) Final commit on this branch, new work complete
|    |
|    Many other commits in between...
|    |
|    * c3d4e5 Starting new work
|   /
| /
* d4e5f6 Previous version, long ago

最新的提交a1b2c3git checkout mainthen和另一个分支的阶段性集体更改的结果。现在,两个分支末尾的 repo 状态是相同的(没有输出)git merge--squashdevelop/new-updategit commitgit diff main develop/new-update


问题

现在,当我将其推送到 Github 时,它显示了“比较和拉取请求”通知,这让我感到困惑: github网站上的pull request按钮截图

如果这些分支的最终状态相同,为什么它要求我拉请求?如果我创建并接受了拉取请求,它将对 repo 做什么?

我注意到 squash 合并提交只有一个父提交,就好像我在主分支上直接编写了这些更改(并且开发分支说 X 提前提交,1 次提交在主之后)。拉取请求会使开发分支再次“指向”主分支吗?

我只在与其他人的项目合作时使用拉取请求,比如将我的分支的一个分支合并到原始分支中。我在您自己的 repo 上找到了有关拉取请求的这篇文章,但它只讨论了用途,并且在谷歌上搜索拉取请求只会显示存在差异分支但尚未合并的示例;或涉及不同的回购。

我会很感激任何见解。谢谢 !

标签: gitgithubgit-mergepull-request

解决方案


首先让我们明确一点:壁球合并不是任何形式的合并。正如您已经观察到的,它是在分支上创建普通的单亲提交。拓扑没有任何记录表明此提交“来自”开发/新更新。

其次,拉取请求实际上是合并请求。这是一个合并的提议。

因此,您要求将一个完全独立的分支develop/new-update 合并到main 中。那么,为什么不呢?他们很久以前就在 d4e5f6 分道扬镳。从那时起,它们可能代表了两种不同的历史。

此外,请记住:

  • 即使它们的差异为零,将 A 合并到 B 也是合法的,就像加入拓扑的一种方式一样。您可能希望这样做。

  • 在形成拉取请求后,您可以进行更多提交并推送它们。现在分支会有所不同。

所以 GitHub 不知道你的长期意图是什么。因此,它不会否认您可能想要启动拉取请求。如果它要反对,那将在该过程的后期发生。


推荐阅读