git - 来自我自己仓库的相同分支的 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
最新的提交a1b2c3
是git checkout main
then和另一个分支的阶段性集体更改的结果。现在,两个分支末尾的 repo 状态是相同的(没有输出)git merge
--squash
develop/new-update
git commit
git diff main develop/new-update
问题
现在,当我将其推送到 Github 时,它显示了“比较和拉取请求”通知,这让我感到困惑:
如果这些分支的最终状态相同,为什么它要求我拉请求?如果我创建并接受了拉取请求,它将对 repo 做什么?
我注意到 squash 合并提交只有一个父提交,就好像我在主分支上直接编写了这些更改(并且开发分支说 X 提前提交,1 次提交在主之后)。拉取请求会使开发分支再次“指向”主分支吗?
我只在与其他人的项目合作时使用拉取请求,比如将我的分支的一个分支合并到原始分支中。我在您自己的 repo 上找到了有关拉取请求的这篇文章,但它只讨论了用途,并且在谷歌上搜索拉取请求只会显示存在差异分支但尚未合并的示例;或涉及不同的回购。
我会很感激任何见解。谢谢 !
解决方案
首先让我们明确一点:壁球合并不是任何形式的合并。正如您已经观察到的,它是在分支上创建普通的单亲提交。拓扑没有任何记录表明此提交“来自”开发/新更新。
其次,拉取请求实际上是合并请求。这是一个合并的提议。
因此,您要求将一个完全独立的分支develop/new-update 合并到main 中。那么,为什么不呢?他们很久以前就在 d4e5f6 分道扬镳。从那时起,它们可能代表了两种不同的历史。
此外,请记住:
即使它们的差异为零,将 A 合并到 B 也是合法的,就像加入拓扑的一种方式一样。您可能希望这样做。
在形成拉取请求后,您可以进行更多提交并推送它们。现在分支会有所不同。
所以 GitHub 不知道你的长期意图是什么。因此,它不会否认您可能想要启动拉取请求。如果它要反对,那将在该过程的后期发生。
推荐阅读
- python-3.x - 如何在 Tkinter 笔记本中包含自动缩进功能?
- python - 在 Django 中为每个用户设置一个 IP 白名单
- node.js - Laravel view 和 node.js api 结合项目配置
- python - 最佳实践:在 django 框架中放置抓取文件的位置
- python - 如何使用 re.search 从字符串中提取所有日期?
- javascript - React Stripe 拆分卡元素出错:超出最大更新深度
- react-native - 如何修复意外的令牌,预期的“;” 反应中的错误
- informatica - Informatica 审计框架
- r - removeUI 不会完全删除 UI
- reactjs - Recharts XAxis 未显示来自 tickFormatter 的日期值