我有一个父分支和一个子分支。
当我想将一个子分支合并到一个父分支时,有人说重新分支是最好的合并方法。
如果我们要重新定基,则在另一个分支中进行的所有更改都将进入当前子分支中,对吗?
然后,当某人想要查看子分支中进行的新更改时,另一个分支的更改也将变得正确。
有人可以对Rebasing VS Pull Request VS Merge有所了解吗?
我正在寻找合并分支的最佳方法。
答案 0 :(得分:3)
首先,根据我的经验,如果您的情况是团队(多人)正在同时开发分支机构。那么Rebase
将不适合这样做。因为如果您的一位同事执行rebase
,则可以修改所有提交。同时,如果另一个人正在开发此分支,则很有可能找不到公共父节点,并且无法提交提交。
rebase
可以使历史记录更清晰(一行),而merge
则不能。
变基vs拉请求vs合并
拉取请求仅用于引发一个请求,以决定如何“解决”分支之间的提交的方式。提出拉取请求后,您可以决定要选择哪种合并类型的策略。
为更好地解释 Rebase 和 Merge ,在这里,我首先设置方案:
假设您有两个分支,母版和开发。 develop 是从 master 处( 3。添加的merge.txt文件)提交的分支:
现在,将 HEAD 设置为 6.added hello.txt文件,这是master分支的最新提交。
基于上述情况,执行git merge develop
。下面是显示的结果:
Git将遵循两个分支(3.added merge.txt文件)的共同祖先自动进行三向合并。,两个分支(6.added hello.txt file)
和(5.added test.txt file)
的最新提交。然后,将根据合并中的修改内容生成新的提交,即提交 7。合并分支“开发” 。
这就是merge
的作用,它简单地合并了两个分支并生成了新的提交。
此外,基于上述情况,执行git rebase develop
。下面是显示的结果:
您会看到 develop 分支和分支消失了。
执行rebase
操作时,git将从当前分支(6.added hello.txt file)
中提取更改(master)
,并且此更改是 start 的共同祖先两个分支(3.added merge.txt file)
。
然后让master分支指向目标分支 develop 的最新提交(5.added test.txt file)
。并将刚刚提取的更改应用于此最新提交。
如果提取有多个更改,则git将依次应用于最新提交。如下所示,左边是初始状态,右边是执行 rebase 后的状态:
总而言之,git rebase
提取操作有点像git cherry-pick
(只是相似,但不相同)。在执行rebase
之后,它将依次选择当前提交,然后发送到目标分支。之后,将删除原始分支上提取的提交。
摘要:
您可以看到merge
的结果可以反映时间轴,但是rebase
会破坏时间轴。他们两者都可以实现代码组合,只是针对公共分支,例如 master ,不建议使用Rebase
。
此外,合并的麻烦在于回滚提交节点。但是,由于在完成 rebase 之后进行了重新设置,所以您不知道将开发分支拉到了哪里,这就是我提到的破坏历史时间表的时间。
答案 1 :(得分:1)