Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:从命令行使用merge=ours策略_Git_Merge - Fatal编程技术网

Git:从命令行使用merge=ours策略

Git:从命令行使用merge=ours策略,git,merge,Git,Merge,有时,我想告诉git在发生冲突时使用某个分支的版本 我可以通过运行以下命令来完成此操作: git config-global merge.ours.driver true,然后添加内容为pom.xml merge=ours的.gittributes文件 不需要更改git配置或使用.gittributes就可以做到这一点吗?如果可能的话,我想内联指定它 比如 git合并开发 为了提供一些上下文,在这些特殊情况下POM将发生冲突,我将同时更改发布版本和开发版本。我正在尝试自动化这个部分,所以手动检查

有时,我想告诉git在发生冲突时使用某个分支的版本

我可以通过运行以下命令来完成此操作: git config-global merge.ours.driver true,然后添加内容为pom.xml merge=ours的.gittributes文件

不需要更改git配置或使用.gittributes就可以做到这一点吗?如果可能的话,我想内联指定它

比如 git合并开发


为了提供一些上下文,在这些特殊情况下POM将发生冲突,我将同时更改发布版本和开发版本。我正在尝试自动化这个部分,所以手动检查结果的机会有限。我不想使用.gittributes,因为有时我真的需要解决冲突和真正的更改,而不仅仅是版本号,没有具有确切效果的命令行标志

有一种方法可以做到这一点,但它相当手动,并且暴露了merge.ours.driver中的缺陷。假设您运行git merge develop,pom.xml中存在冲突。这是您将看到的:

$ git merge develop
... message about conflict in pom.xml
$ git status
Unmerged paths:
    ...
    pom.xml
此时,要将pom.xml解析为我们的,只需运行:

$ git checkout --ours pom.xml && git add pom.xml
因为冲突合并将pom.xml的所有三个版本都放入索引中,而git checkout-ours将复制您的头版本而不是它们的合并头,即将开发版本复制到工作树,然后git add解决冲突

不过,假设git merge develop发现您没有更改pom.xml,而他们确实更改了pom.xml。在本例中,Git将采用他们的pom.xml版本:文件中不会出现冲突。如果没有其他冲突,您甚至没有机会用自己的pom.xml覆盖它们的pom.xml:Git将继续自己进行合并提交

但即使是我们的司机也会这样。如果没有冲突,因为我们没有接触该文件,Git只接受他们的文件。我们的驱动程序仅在两个分支提示都更改了文件时才生效,这与公共合并基提交有关

在这种情况下,我们的驱动程序比-Xours更强大,因此有一些情况下Git会说自动合并并成功,我们的驱动程序会完全跳过合并。但最终,这里有几个角落的案例需要关注,merge.ours.driver只处理其中一个

最后你能做些什么 最后,有两种方法可以解决这一问题:

在不提交的情况下运行merges,以便Git在提交结果之前停止。然后,您可以测试合并并确保它是好的,如果需要,在提交之前修复任何问题

允许合并提交,但测试结果。如果它是错误的,立即用后续的fix-commit或git-commit-amend修复它,用新的和不同的合并提交替换分支顶端的合并提交


请注意,-no commit and fix和-amend方法都会产生一些人可能称之为的错误。有些人可能不会这么说,特别是如果合并本身产生或将产生冲突的话。这取决于进行合并的您,您可以决定这是比其他选择更好还是更差。

感谢您提供了这一富有洞察力的答案。为了提供一些上下文,在这些特殊情况下POM将发生冲突,我将同时更改发布版本和开发版本。我正在尝试自动化这个部分,所以手动检查结果的机会有限。我不想使用.gittributes,因为有时候我真的需要解决冲突,需要真正的更改,而不仅仅是版本号。关于git merge-s我们开发的是什么?