背景
在多人项目中,有的时候你开发的分支和 master 会有很多冲突,尤其是 squash merge 的时候。这时,你分支中依赖 master 中的某个文件,你只想合并这个文件而不是整个分支,这个时候,你应该如何做。
案例
假设有一个 test1 分支,这个分支里有一个 demo1.txt 文件。路径和文件内容如图所示。
在 test1 分支上建立 test2
git checkout -b test2
而我的 test2 分支的 demo1.txt 的文件内容如图所示:
此时,又有其他人更新了 test1 的一些功能
我并不想解决 test1 和 test2 的其他冲突,因为这很耗费时间,我只想 merge demo1.txt 这个文件。我想使用 same function needed 这一功能,同时,我不希望自己的 test2 被覆盖掉。
那么是否可以用
git checkout test1 express/file/demo1.txt
呢?答案是是不行的,checkout 在上述命令中的含义是覆盖,它会直接把 test1 的 demo1.txt 覆盖当前分支的 demo1.txt 文件。
所以需要使用 --patch 关键字
git checkout --patch test1 express/file/demo1.txt
这个时候会让你解决冲突:
y 和 n,一个是采纳,一个是不采纳,如果选了 y 就相当于覆盖了,所以不行。需要选 e,自己进入 vim edit。
删除 test2 前面的减号,:wq 保存。
完成合并
当然,这个方法的弊端是没有办法利用 vscode 解决冲突,因此比较麻烦。我目前还没有发现更好的办法。