我一直在尝试学习如何从分支 A 成功创建分支 B(这两个分支对我来说都是本地分支),并将它们合并到我公司在 GitLab 中的代码中。我遇到了很多有趣的阅读,但我仍然对如何最好地将我的分支应用回主分支感到困惑。
现在我们有:
main ->
branch_A ->
branch_B
Run Code Online (Sandbox Code Playgroud)
假设我完成了分支 A 并合并了我的 MR。此时main将具有来自的代码branch A(我相信作为合并提交),并且将具有来自原始提交的branch B代码。branch A
我对如何完成我的branch BMR 感到困惑,因为我认为由于branch A代码在两个地方都会发生冲突。我怎样才能让我的branch B承诺main也进入?这是在 GitLab 上。
(如果我尝试在此时进行变branch B基,我想我仍然会看到相同的冲突,但我只会将它们作为变基的一部分遇到。我的目标是以某种方式让我的代码进入,而不会看到一堆虚假的冲突。 )mainmain
(有一段时间,我认为这个很好的问题会对我有所帮助。然而,这更多的是关于如何将更改从main链接分支中获取。我的问题基本上是相反的,如何将代码从分支返回到主分支中,作为我的当我完成后的 MR。如果我遵循了其他问题的说明,我想这两个 MR 都可以快进。但是我认为 GitLab 可能不会快进。)
Tl;dr:合并分支 A 后,合并分支 B。完成。
你从这段历史开始:
--o--o <-- main
\
o--o--o <-- branch A
\
o--o <-- branch B
Run Code Online (Sandbox Code Playgroud)
然后你合并了分支 A。假设 Gitlab 不进行快进合并,你会得到以下历史记录:
--o--o---------MA <-- main
\ /
o--o--o <-- branch A
\
o--o <-- branch B
Run Code Online (Sandbox Code Playgroud)
此时,最自然的事情就是合并分支 B。现在您得到以下历史记录:
--o--o---------MA-----MB <-- main
\ / /
o--o--o / <-- branch A
\ /
o--o <-- branch B
Run Code Online (Sandbox Code Playgroud)
在此合并中,分支 A 上的提交不会引起任何冲突。提交图的力量在这里发挥作用:MA执行提交和分支 B 的三向合并。合并基础是分支 A 的尖端。但由于合并基础(分支 A)和 之间没有内容差异MA,因此不会发生冲突。
其他人建议您将分支 B 重新设置为主分支。如果您愿意,您可以这样做:
git rebase main branch_B
Run Code Online (Sandbox Code Playgroud)
你得到这段历史:
--o--o---------MA <-- main
\ / \
o--o--o \ <-- branch A
\
o--o <-- branch B
Run Code Online (Sandbox Code Playgroud)
在此操作期间,分支 A 上的提交也不会导致任何冲突。
现在您也可以将重新调整的分支合并到主分支中:
--o--o---------MA---------MB <-- main
\ / \ /
o--o--o \ / <-- branch A
\ /
o--o <-- branch B
Run Code Online (Sandbox Code Playgroud)
无论您是否 rebase 分支 B,您的团队如何运作都是个人品味或惯例的问题。完全没有必要这样做。
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |