Git合并两个源自master的分支时,同名文件的代码变化问题
嘿,这个问题问得很典型,很多刚用Git的朋友都会碰到,我给你拆解清楚哈~
test1文件合并到Master的几种情况 Git处理这种合并的逻辑,核心看两个分支里test1文件的内容差异情况,主要分下面几个场景:
1. 两个分支的test1内容完全一模一样
这种情况最省心,Git会直接完成合并,master里的test1就是这个相同的版本,不会有任何额外变动,连冲突提示都不会有。
2. 两个分支改了test1的不同区域(没有重叠修改)
比如branch1改了文件的第1-5行,branch2改了第10-15行,Git会自动把这两处改动合并到master的test1里,不需要你手动干预,合并完成后文件会同时包含两个分支的所有修改。
3. 两个分支改了test1的同一部分(重叠/冲突修改)
这就是最常见的冲突场景了。举个例子:branch1把第3行改成了console.log('hello branch1'),branch2把同一行改成了console.log('hello branch2'),Git没办法自动判断该保留哪一个版本,就会触发合并冲突。
这时候打开test1文件,你会看到类似这样的冲突标记:
<<<<<<< HEAD [master分支原本的内容(如果有的话)或者当前合并基准的内容] ======= [branch2里修改后的内容] >>>>>>> branch2
(注:如果是先合并branch1到master,再合并branch2,标记里的分支名会对应变化)
遇到这种情况,你需要手动编辑test1:删掉这些冲突标记,保留你最终想要的内容,然后执行下面的命令完成合并:
git add test1 git commit
4. 其中一个分支新增了test1,另一个分支也新增了同名文件但内容不同
比如master原本没有test1,branch1和branch2各自新增了这个文件但内容不一样。当你先把其中一个分支(比如branch1)合并到master后,master就有了test1;再合并另一个分支(branch2)时,就会触发上面说的冲突场景,因为Git会认为这是对同一个文件的不同修改版本。
总的来说:Git会优先尝试自动合并,只有当两个分支对文件的同一部分内容有不同修改时,才需要你手动介入解决冲突。
内容的提问来源于stack exchange,提问作者cherif

