merge的提交是否可以包含修改内容?
今天在使用git的时候突然想到一个问题,我们在提交MR时,仓库管理员合并我们的提交时,新增的merge提交是否会包含修改内容?
所以做了个实验,步骤如下:
- 创建branch_a和branch_b两个分支,
- 在branch_a分支的a.txt最后增加一行:add a,增加后并提交;在branch_b分支的a.txt最后增加一行:add b,增加后并提交
- 在checkout到branch_a后执行git merge branch_b,提示冲突,然后编辑冲突文件a.txt,保留add a和add b两行,然后add后commit
- git log可以看到branch_a多了两个提交,一个是来自branch_b的add b的提交,一个是merge提交
通过git show -p merge提交 可以看到它是有内容的,显示增加了add a和add b两行内容
其他提交内容没有变化
所以从上面实验可以知道merge的提交是可以包含修改内容的,是将基于冲突的修改作为内容
那还有一个问题,如果merge时没有冲突
的话,merge是否会包含修改内容?这个要看情况:
- 如果merge的来源分支是超前于当前分支,并且来源分支的最新提交是一个包含修改内容的merge提交的话,那么merge过来的时候就不会生成新的merge提交,而是直接将分支名指向来源分支的merge提交,那就相当于是merge后的提交是有修改内容的;
- 如果merge的来源分支的最新提交和当前分支没有冲突,并且是分叉的关系,就会生成一个新的merge提交,这个新的merge提交是没有修改内容的。