假设我执行了一个 git 合并操作,发现某些文件(如 package.json
或 pom.xml
)存在冲突。
我想要:
- 在命令行中自动解决特定文件的合并冲突,
- 对于其他所有冲突,让我手动解决,
- 确保不会丢失任何分支的重要更改。
由于第二点,我不能使用 git merge -Xours
,因为这将解决所有的冲突。我只想要解决一个特定文件中的冲突。
由于第三点,我不能使用 git checkout --ours package.json
,因为这可能会丢失输入分支的一些更改。
例如,自动合并脚本会以预定义的方式解决一些简单的已知冲突,并在其他文件中出现其他冲突时失败。
我通常遇到的典型情况是:两个包含 package.json
中的 version
字段的分支发生了分歧,如下所示:
$ git diff
diff --cc package.json
index 75c469b,f709434..0000000
--- a/package.json
+++ b/package.json
@@@ -1,6 -1,6 +1,12 @@@
{
"name": "test",
++<<<<<<< HEAD
+ "version": "2.0.1",
++||||||| merged common ancestors
++ "version": "1.0.0",
++=======
+ "version": "1.0.2",
++>>>>>>> master
是否可以使用给定的策略仅解决一个文件的冲突?就像这样:
git-resolve-conflict --ours package.json
git -x
仅匹配精确匹配,但文件名缺少前导路径。 - Mattcd "./"$(git rev-parse --show-cdup)
以移动到库的根目录,然后在最后加上cd -
返回到之前的文件夹。(如果你从库外运行脚本,则此方法不适用,但这可能是一个非常特殊的边缘情况。) - jakub.g