【问题标题】:Implications of Git Pull Request from an identical branch of my own repo来自我自己仓库的相同分支的 Git 拉取请求的含义
【发布时间】:2021-09-07 15:36:18
【问题描述】:

我是 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 main 然后 git merge--squashdevelop/new-updategit commit 另一个分支的阶段性集体更改的结果。 现在,两个分支末尾的 repo 状态是相同的(git diff main develop/new-update 没有输出)


问题

现在,当我将其推送到 Github 时,它显示了“比较和拉取请求”通知,这让我感到困惑:

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

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

我只在与他人的项目合作时使用拉取请求,比如将我的分支的一个分支合并到原始分支中。我在你自己的仓库中找到了this article关于拉取请求,但它只讨论了用途,谷歌搜索拉取请求只会显示存在差异分支但尚未合并的示例;或涉及不同的回购。

如果有任何见解,我将不胜感激。谢谢!

【问题讨论】:

    标签: git github git-merge pull-request


    【解决方案1】:

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

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

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

    此外,请记住:

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

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

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

    【讨论】:

    • 好的,我现在明白了,谢谢!我的印象是,任何形式的 git merge 都会以某种方式记录合并的更改来自哪里(即使它仅使用 1 个父级表示 squash 合并),因此拉取请求似乎是一个重复的操作。澄清一下,通过 github 上的拉取请求是否等同于在本地再次运行常规 git merge(除了现在它不能快进,因为两个分支都有提交)?
    猜你喜欢
    • 1970-01-01
    • 2018-05-14
    • 2021-05-27
    • 1970-01-01
    • 2012-09-20
    • 2018-10-27
    • 2015-10-16
    • 2018-10-20
    • 2021-09-24
    相关资源
    最近更新 更多