Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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冲突_Git_Github_Merge_Pull Request - Fatal编程技术网

通过自动合并所有更改来解决特定文件的git冲突

通过自动合并所有更改来解决特定文件的git冲突,git,github,merge,pull-request,Git,Github,Merge,Pull Request,有一个使用github存储库的项目。当合并请求前存在需要解决的冲突时,大约90%的冲突案例只涉及一个CHANGELOG文件,其中包含已完成的票据列表,例如: ## current <<<<<<< HEAD ISSUE-128 done some 128 ISSUE-131 done some 131 ======= ISSUE-125 done some 125 >>>>>>> ISSUE-125 ISSUE-

有一个使用github存储库的项目。当合并请求前存在需要解决的冲突时,大约90%的冲突案例只涉及一个
CHANGELOG
文件,其中包含已完成的票据列表,例如:

## current

<<<<<<< HEAD
ISSUE-128 done some 128
ISSUE-131 done some 131
=======
ISSUE-125 done some 125
>>>>>>> ISSUE-125
ISSUE-126 done some 126
ISSUE-120 done some 126
ISSUE-123 done some 126
##当前
>第125期
第126期做了一些工作
第120期已完成约126项
第123期已完成约126项
我想知道是否有一种方法可以通过一个简单的规则来自动合并这个特定的文件(可能通过提供一些使用gitignore格式的配置),只接受双方的更改(至于顺序,只要更改彼此相邻就足够了,知道如何控制顺序是次要的,但也很有趣)。另外的规则是验证每边是否始终只有一个添加,然后再进行自动合并


理想的情况是在github上有这样的配置,但即使是本地git解决方案也会有所帮助。

[答案,根据注释稍微修改。]


您在这里需要的通常称为union merge,它实际上内置于Git中。它很少做正确的事情,但对于这种特殊情况,union merge实际上可能是正确的。您可以使用
.gittributes
,为特定文件名设置union merge。有关详细信息,请参阅


事实上,我唯一担心的是,对于“更复杂”的冲突,我宁愿看到有冲突需要合并

右图:我认为,联合合并的主要问题是,它总是成功的,即使合并结果毫无意义。您需要记住,它是这样设置的,每次都要小心检查合并结果


(就我个人而言,如果Git将其拆分为一个单独的“解决方案”,我会更乐意接受这一切)命令可以在每个文件上调用。我认为
git merge file
命令实际上是人们在这里想要的,只是使用起来很麻烦。使用更有用的界面,而不是
-X ours
-s ours
-X theres
等等,以及
.gittributes
中的各种合并驱动程序,we可以让合并冲突发生,检查它们,决定保留哪一方(s)是否足够,然后继续。当然,如果一个人在这条路上走得更远,他最终会得到一个GUI合并工具……)

这个问题经常发生;除了Changelog样式的文件外,如果您有源文件和添加新内容,也会发生这种情况-大多数情况下,您在某个规范位置添加新方法或任何东西(如文件末尾附近),并且在合并时,每次都会显示为冲突

简短回答:git在这方面帮不了你,其他任何自动合并工具也帮不了你,缺少真正的人工智能。其他地方提到了
union
驱动程序,但是,坦率地说,这对我来说是非常危险的,即使是对一个变更日志文件也是如此。你可以用一个理解变更日志格式的自定义合并驱动程序来完成t、 但是这种努力可能会让你放弃这个想法(如果是这样,那么
gittributes
manpage会为你提供更多信息)

旁白/提示:在我的源文件中有这样的评论,我取得了一些成功:

  def lastmethodinclass
    ...
  end

  ## placeholder 1 ##

  ## placeholder 2 ##

  ## placeholder 3 ##

end # class
然后,在第一个分支中,我在“占位符1”后面放了一个新方法。如果我后来记得在另一个分支中,我已经“用完”了第一个占位符,我将下一个方法放在第二个占位符之后,依此类推

这仍然很尴尬,但它可以避免那些讨厌的冲突。我不时清理合并后积累的旧占位符,并将它们放回它们所属的位置


与其他人一起编码时没有用,是的。

您在这里想要的通常称为联合合并,这实际上是内置于Git中的。它很少做正确的事情,但对于这种特殊情况,联合合并实际上可能是正确的。请看,这正是我需要的,包括配置文件集的可能性。我很乐意接受如果你写一个答案:)事实上,我唯一还在担心的是“更复杂”冲突我宁愿看到有冲突需要与您提供的所有信息进行合并,我想知道是否可以定义自定义合并驱动程序,该驱动程序将在github上工作,对于任何更复杂的情况,都将失败,因此github将显示一条消息,说明存在要解决的冲突,对于“简单情况”只会有一个绿色按钮,允许执行合并。我可能会尝试准备这样的
.gittributes
config。。。