Git对多个分支上的单行进行更改,并保留所有更改

Git对多个分支上的单行进行更改,并保留所有更改,git,merge-conflict-resolution,git-merge-conflict,Git,Merge Conflict Resolution,Git Merge Conflict,我的代码中有一行很长的代码,其中包含了一些东西的ID。下面是一个例子 const IDs="0,1,2,3,4" 我想在多个分支上添加到此行。这里有一个例子 分支机构1: const IDs="0,1,2,3,4,87" 分支机构2: const IDs="0,1,2,3,4,95" 在分支1上,我在行中添加了87,在分支2上,我添加了95。一旦这些合并,就会出现合并冲突 解决这个问题的一个简单方法就是保留其中一个更改,然后手动添加来自另一个分支的更改。但在我的实际案例中,这一行要长得多,

我的代码中有一行很长的代码,其中包含了一些东西的ID。下面是一个例子

const IDs="0,1,2,3,4"
我想在多个分支上添加到此行。这里有一个例子

分支机构1:

const IDs="0,1,2,3,4,87"
分支机构2:

const IDs="0,1,2,3,4,95"
在分支1上,我在行中添加了
87
,在分支2上,我添加了
95
。一旦这些合并,就会出现合并冲突

解决这个问题的一个简单方法就是保留其中一个更改,然后手动添加来自另一个分支的更改。但在我的实际案例中,这一行要长得多,添加了更多的ID,它们并没有全部附加到末尾。它们大多分散在中部

有没有一种方法可以解决冲突,这样就可以添加两个添加项,而不用我自己手动添加它们,这样看起来就像这样

const IDs="0,1,2,3,4,87,95"
您可以编写自己的合并驱动程序

当Git遇到可能导致合并冲突的情况时,它会运行一个合并驱动程序。Git的默认内置合并驱动程序查找冲突,将其声明为冲突,并将冲突标记保留在工作树中的文件副本中。这就是你一直在用手解决的问题

但是,如果您使用将源文件标记为具有合并驱动程序,Git将使用您定义的合并驱动程序而不是其内置驱动程序。Git在索引中已经有文件的所有三个副本:

  • 合并基础副本,来自公共、共享提交
  • --ours
    HEAD
    提交/当前分支复制;及
  • ——他们的
    从要合并的提交中复制
Git将把所有三个副本提取到临时文件中,并用这些临时文件的名称调用合并驱动程序。合并驱动程序必须:

  • 找出基本文件与
    我们的
    他们的
    副本之间的差异,以及
  • 合并这些差异,将结果写入
    ours
    副本
如果您的驱动程序发现冲突,您的驱动程序应报告非零退出状态。如果没有,您的驱动程序应以零状态退出以报告成功

也就是说,您需要复制标准低级驱动程序所做的工作。关键的区别在于,如果有一行在这两个方面都发生了变化,并且可以通过计算机程序解决,而标准的低级驱动程序无法解决,那么您可以继续解决它

如果不想重新编写所有标准的低级驱动程序,可以先调用Git的低级合并驱动程序。这是一个独立的命令,
git merge file
。它将执行与Git内置的低级驱动程序相同的操作,并返回相同的退出状态。然后,您可以检查该状态,如果它说存在合并冲突,您可以让您的程序尝试解决它们。如果您的程序成功,您的程序可以报告零退出状态

(编写好的合并驱动程序是不平凡的,但是对于您的特定情况,如果您使用
git merge file
来完成大部分工作,那么它可能没有那么糟糕。)

您可以编写自己的合并驱动程序

当Git遇到可能导致合并冲突的情况时,它会运行一个合并驱动程序。Git的默认内置合并驱动程序查找冲突,将其声明为冲突,并将冲突标记保留在工作树中的文件副本中。这就是你一直在用手解决的问题

但是,如果您使用将源文件标记为具有合并驱动程序,Git将使用您定义的合并驱动程序而不是其内置驱动程序。Git在索引中已经有文件的所有三个副本:

  • 合并基础副本,来自公共、共享提交
  • --ours
    HEAD
    提交/当前分支复制;及
  • ——他们的
    从要合并的提交中复制
Git将把所有三个副本提取到临时文件中,并用这些临时文件的名称调用合并驱动程序。合并驱动程序必须:

  • 找出基本文件与
    我们的
    他们的
    副本之间的差异,以及
  • 合并这些差异,将结果写入
    ours
    副本
如果您的驱动程序发现冲突,您的驱动程序应报告非零退出状态。如果没有,您的驱动程序应以零状态退出以报告成功

也就是说,您需要复制标准低级驱动程序所做的工作。关键的区别在于,如果有一行在这两个方面都发生了变化,并且可以通过计算机程序解决,而标准的低级驱动程序无法解决,那么您可以继续解决它

如果不想重新编写所有标准的低级驱动程序,可以先调用Git的低级合并驱动程序。这是一个独立的命令,
git merge file
。它将执行与Git内置的低级驱动程序相同的操作,并返回相同的退出状态。然后,您可以检查该状态,如果它说存在合并冲突,您可以让您的程序尝试解决它们。如果您的程序成功,您的程序可以报告零退出状态


(编写好的合并驱动程序是不平凡的,但是对于您的特定情况,如果您使用
git merge file
来完成大部分工作,那么它可能没有那么糟糕。)

这是一个很好的答案。谢谢这是一个很好的答案。谢谢