正在重新制定合并分支机构的最佳策略

时间:2019-11-13 08:32:48

标签: git azure-devops rebase pull-request merge-request

我有一个父分支和一个子分支。

当我想将一个子分支合并到一个父分支时,有人说重新分支是最好的合并方法。

如果我们要重新定基,则在另一个分支中进行的所有更改都将进入当前子分支中,对吗?

然后,当某人想要查看子分支中进行的新更改时,另一个分支的更改也将变得正确。

有人可以对Rebasing VS Pull Request VS Merge有所了解吗?

我正在寻找合并分支的最佳方法。

2 个答案:

答案 0 :(得分:3)

首先,根据我的经验,如果您的情况是团队(多人)正在同时开发分支机构。那么Rebase将不适合这样做。因为如果您的一位同事执行rebase,则可以修改所有提交。同时,如果另一个人正在开发此分支,则很有可能找不到公共父节点,并且无法提交提交。

rebase可以使历史记录更清晰(一行),而merge则不能。

  

变基vs拉请求vs合并

  • 拉动请求

拉取请求仅用于引发一个请求,以决定如何“解决”分支之间的提交的方式。提出拉取请求后,您可以决定要选择哪种合并类型的策略。


为更好地解释 Rebase Merge ,在这里,我首先设置方案:

假设您有两个分支,母版开发 develop 是从 master 处( 3。添加的merge.txt文件)提交的分支:

enter image description here

现在,将 HEAD 设置为 6.added hello.txt文件,这是master分支的最新提交。

  • 合并

基于上述情况,执行git merge develop。下面是显示的结果:

enter image description here

Git将遵循两个分支(3.added merge.txt文件)的共同祖先自动进行三向合并,两个分支(6.added hello.txt file)(5.added test.txt file)的最新提交。然后,将根据合并中的修改内容生成新的提交,即提交 7。合并分支“开发” 。        这就是merge的作用,它简单地合并了两个分支并生成了新的提交。

  • 变基:

此外,基于上述情况,执行git rebase develop。下面是显示的结果:

enter image description here

您会看到 develop 分支和分支消失了。

执行rebase操作时,git将从当前分支(6.added hello.txt file)中提取更改(master),并且此更改是 start 的共同祖先两个分支(3.added merge.txt file)

然后让master分支指向目标分支 develop 的最新提交(5.added test.txt file)。并将刚刚提取的更改应用于此最新提交。

如果提取有多个更改,则git将依次应用于最新提交。如下所示,左边是初始状态,右边是执行 rebase 后的状态:

enter image description here

总而言之,git rebase提取操作有点像git cherry-pick(只是相似,但不相同)。在执行rebase之后,它将依次选择当前提交,然后发送到目标分支。之后,将删除原始分支上提取的提交。


摘要:

您可以看到merge的结果可以反映时间轴,但是rebase会破坏时间轴。他们两者都可以实现代码组合,只是针对公共分支,例如 master ,不建议使用Rebase

此外,合并的麻烦在于回滚提交节点。但是,由于在完成 rebase 之后进行了重新设置,所以您不知道将开发分支拉到了哪里,这就是我提到的破坏历史时间表的时间。

答案 1 :(得分:1)

我的建议是获得同时使用rebasingmerging的经验。然后,您会知道最适合您的。它还取决于有多少人在从事该项目及其git知识。如果他们不熟悉git,通常最好合并。

我个人更喜欢重新设置基准并保持存储库历史记录整洁。

而且,拉取请求是一种向项目提交贡献的方法,与上面提到的不同。

相关问题