git - 分支分支合并时会发生什么
问题描述
我有一个在 Git Pro 书中找不到答案的问题。
假设我创建了branchA
off master
,做了一些更改,提交并推送了 pull request。我很确定这个分支会origin/master
在某个时候合并到,但我想根据提交的更改创建进一步的开发branchB
。branchA
问题是什么branchB
时候branchA
会合并?
我的看法是,如果拉取请求批准者合并branchA
,那么我的branchB
拉取请求将已经包含来自的提交,branchA
并且 diff 将有效地仅显示和之间branchA
的更改branchB
但是,如果尚未合并,则拉取请求branchB
将显示来自两个分支的更改,并且由批准者决定是否合并branchA
,然后branchB
或仅branchB
.
请纠正我的推理
解决方案
你有这种情况:
branch-A
v
1---2---3---4
/
O---O---O---O
^
master
然后你这样做了:
branch-A branch-B
v v
1---2---3---4---5---6---7---8
/
O---O---O---O
^
master
总结一下目前的状态:
- A 到 master 的拉取请求将显示 A 和 master 之间的差异,这实际上是提交 1-4
- B 到 master 的拉取请求将显示 B 和 master 之间的差异,这实际上是提交 1-8,因此包括 A 中尚未合并到 master 的所有更改
如果您现在决定完成对 A 的拉取请求,您会遇到以下情况:
branch-A branch-B
v v
1---2---3---4---5---6---7---8
/ \
O---O---O---O---------------X
^
master
X 现在是合并提交。在此之后,没有其他更改或操作,如果您重新访问 B 的拉取请求,它现在应该(再次,仍然)显示 B 和 master 之间的差异,但现在它只包括提交 5-8。
相反,如果您首先完成了对 B 的拉取请求,那么您最终会得到以下结果:
branch-A branch-B
v v
1---2---3---4---5---6---7---8
/ \
O---O---O---O-------------------------------Y
^
master
如果您现在重新访问 A 的拉取请求,取决于工具,您会看到一个空的差异,或者拉取请求可以标记为已完成(我似乎记得 Bitbucket for Enterprise 使用这种方法),因为 A 中的所有更改都有已经成功合并。
所以总结一下:
TL;DR : 你的 B 分支并没有真正受到影响,但是它和 master 之间的差异最初也会包括来自 A 的所有更改,但是在完成 A 的 PR 后,它只会显示 B 和 master 之间的差异,并且不再显示显示来自 A 的更改,因为它们已被合并。因此,您关于“我的看法”的段落是正确的。
推荐阅读
- java - Reactor Netty HTTPS 代理支持
- c# - SSIS:在 VS2017 中构建和运行成功,但在服务器中无法编译包中包含的脚本。似乎sintaxis是错误的,但不是
- slickgrid - 禁用整个 slickgrid
- python - tkinter:每个窗口的相同图标
- java - 错误 R10(启动超时)-> Web 进程未能在启动 heroku 后 60 秒内绑定到 $PORT
- math - 如何检测和计算图像中的角度?(喷)
- firebase - I/flutter (21647): NoSuchMethodError: Class 'User' has no instance getter 'password'
- rest - 当请求完成异步 DELETE 操作的状态时,服务器应该响应什么状态代码?
- reactjs - React/Framer Motion {variants} 不起作用?
- javascript - 如何通过单击文本提交从循环生成的许多表单之一