在 Git 中变基为 Master 之前与另一个功能分支合并
Merging with another feature branch before rebasing to Master in Git
所以我试图了解 Git 如何处理某些流程以及一些已经使用的做法。
假设我们有一个 Git 存储库,其中有一个名为 master
的分支。我们还有两个从 master
同时创建的分支。我们称它们为 branch_one
和 branch_two
。
branch_one
已经完成了特定功能的工作。我目前正在开发 branch_two
。为了这次对话,我们假设我无法将 branch_one
合并到 master
,因为它正在等待其他开发人员的批准。
这是问题所在:
我需要 branch_one
的所有工作才能继续 branch_two
的工作。
这是我目前的流程:
1) 合并 branch_one
到 branch_two
.
2) 在 branch_two
.
上工作
3) 在提交拉取请求之前将 branch_two
与 master
变基。
呃哦。 rebase 在 30 多个补丁上有冲突。我假设这是因为合并(第 1 步)更改了 branch_two
的头部。我可能假设不正确。
显然,我想在我的版本控制过程中避免大量的冲突解决步骤。
所以我的问题:
是否有更好的方法来处理这种类型的过程,其中一个功能分支需要从另一个功能分支进行更改,但不包含大量冲突?
您 运行 陷入 GIT 中的一个常见陷阱。解决方案总是,提前想好。在您的场景中,提前知道您是否需要一个分支的功能将使您能够以一种避免此问题的方式进行分支:
从 master 分支创建一个 epic-branch
git checkout -b epicBranch
从 epicBranch
中创建 branch_one
和 branch_two
git checkout -b branch_one
git checkout -b branch_two
一旦您需要 branch_one
的功能,您就可以 PR 并将 branch_one
合并到 epicBranch
然后将 epicBranch
合并到 branch_two
git checkout branch_two
git merge epicBranch
现在您可以在 branch_two
中对 branch_one
进行更改,而无需关闭分支的开销。
您将拥有提交历史记录,并且在合并或变基时不应 运行 出现任何问题。
您还可以通过将需要的功能提交到一个可以在分支之间共享的自己的分支中来避免很多麻烦。
您需要一个集成分支,由主 HEAD 制作:
- 在集成中合并 branch1
- 在集成之上对 branch2 进行变基。
如果 branch1 在其验证上下文中需要额外的工作,请再次合并新的 branch1 提交。
在某个时候,branch1 将合并到 master。
然后,无论何时您想要验证 branch2,首先在更新的集成分支之上对其进行变基。然后将其合并到集成中(使用 --no-ff
:无快进合并)。
最后,准备好后将branch2合并到master。那里没有冲突。
有关此工作流程的更多信息, (far better than Gitflow)
所以我试图了解 Git 如何处理某些流程以及一些已经使用的做法。
假设我们有一个 Git 存储库,其中有一个名为 master
的分支。我们还有两个从 master
同时创建的分支。我们称它们为 branch_one
和 branch_two
。
branch_one
已经完成了特定功能的工作。我目前正在开发 branch_two
。为了这次对话,我们假设我无法将 branch_one
合并到 master
,因为它正在等待其他开发人员的批准。
这是问题所在:
我需要 branch_one
的所有工作才能继续 branch_two
的工作。
这是我目前的流程:
1) 合并 branch_one
到 branch_two
.
2) 在 branch_two
.
上工作
3) 在提交拉取请求之前将 branch_two
与 master
变基。
呃哦。 rebase 在 30 多个补丁上有冲突。我假设这是因为合并(第 1 步)更改了 branch_two
的头部。我可能假设不正确。
显然,我想在我的版本控制过程中避免大量的冲突解决步骤。
所以我的问题:
是否有更好的方法来处理这种类型的过程,其中一个功能分支需要从另一个功能分支进行更改,但不包含大量冲突?
您 运行 陷入 GIT 中的一个常见陷阱。解决方案总是,提前想好。在您的场景中,提前知道您是否需要一个分支的功能将使您能够以一种避免此问题的方式进行分支:
从 master 分支创建一个 epic-branch
git checkout -b epicBranch
从 epicBranch
branch_one
和 branch_two
git checkout -b branch_one
git checkout -b branch_two
一旦您需要 branch_one
的功能,您就可以 PR 并将 branch_one
合并到 epicBranch
然后将 epicBranch
合并到 branch_two
git checkout branch_two
git merge epicBranch
现在您可以在 branch_two
中对 branch_one
进行更改,而无需关闭分支的开销。
您将拥有提交历史记录,并且在合并或变基时不应 运行 出现任何问题。
您还可以通过将需要的功能提交到一个可以在分支之间共享的自己的分支中来避免很多麻烦。
您需要一个集成分支,由主 HEAD 制作:
- 在集成中合并 branch1
- 在集成之上对 branch2 进行变基。
如果 branch1 在其验证上下文中需要额外的工作,请再次合并新的 branch1 提交。
在某个时候,branch1 将合并到 master。
然后,无论何时您想要验证 branch2,首先在更新的集成分支之上对其进行变基。然后将其合并到集成中(使用 --no-ff
:无快进合并)。
最后,准备好后将branch2合并到master。那里没有冲突。
有关此工作流程的更多信息,