Git分支合并疑问:someone.branch先合入master后合入my.branch会否覆盖文件?
Git合并场景分析:同路径独立创建文件的冲突处理
先合someone.branch到master,再合my.branch的流程结果
第一步:合并someone.branch到master
这一步毫无悬念——master里原本没有someone.branch的文件夹和文件,Git会直接把这些新增内容合并进去,不会产生任何冲突,合并完成后master就包含了someone.branch的所有新增文件。
第二步:合并my.branch到master
这时候Git会触发文件冲突,原因是:
master现在已经有了someone.branch带来的同路径文件my.branch是从原始master分支拉出来的,独立创建了完全相同路径的文件,但内容和master里的不一样
Git无法自动判断哪个版本的文件应该保留,所以会:
- 在命令行提示你哪些文件存在冲突(比如
CONFLICT (add/add): Merge conflict in path/to/your/file.txt) - 冲突文件里会被插入标记,分别展示来自
master(即someone.branch的内容)和my.branch的内容 - 你必须手动编辑这些冲突文件,保留需要的内容、合并修改,然后执行
git add <冲突文件>+git commit才能完成合并
推送my.branch显示“创建模式”的影响
推送时显示文件为创建模式,只是说明这些文件在my.branch里是全新创建的(相对于它的上游分支master),这完全不影响后续的合并逻辑——Git合并只看文件的内容差异和历史关联,不管文件是创建还是修改来的。
会不会直接覆盖master里的文件?
绝对不会自动覆盖。Git的默认合并逻辑是避免自动丢弃任何分支的修改,只有当你主动使用git merge --ours(强制保留当前分支即master的内容)或git merge --theirs(强制保留my.branch的内容)这类参数时,才会直接覆盖文件,但这是你主动选择的结果,不是默认行为。
内容的提问来源于stack exchange,提问作者morgan
相关产品推荐
相关产品推荐

