Git 对多个分支上的单行进行更改并保留所有更改
Git make changes to single line on multiple branches and keep all changes
我的代码中有很长一行包含某些东西的 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 的默认内置合并驱动程序会发现冲突,将其声明为冲突,并将冲突标记留在工作树中的文件副本中。那是你一直在手动解决的问题。
如果您使用 the gitattributes file 将源文件标记为具有 合并驱动程序 ,但是,Git 使用您定义的合并驱动程序 而不是 的内置的。 Git 已在索引中包含文件的所有三个副本:
- 合并基础副本,来自共同的共享提交;
--ours
从 HEAD
提交/当前分支复制;和
- 您要合并的提交的
--theirs
副本。
Git 会将所有三个副本提取到临时文件,并使用这些临时文件的名称调用合并驱动程序。您的合并驱动程序必须:
- 找到基础文件与
ours
和theirs
副本的区别,以及
- 合并这些差异,将结果写入
ours
副本。
如果您的驱动程序发现冲突,您的驱动程序应该报告非零退出状态。如果没有,您的驱动程序应通过以零状态退出来报告成功。
也就是说,您需要重复标准低级驱动程序所做的工作。关键区别在于,如果有一行在两者中都发生了变化,并且 you 可以通过计算机程序解析,那么 standard低级驱动不行,你先解决吧
如果您不想重新编写所有标准的低级驱动程序,您可以先调用Git的低级合并驱动程序。它可以作为独立命令使用,git merge-file
。它会做与 Git 的内置低级驱动程序相同的事情,并且 return 也会有同样的退出状态。然后您可以检查该状态,如果它说存在合并冲突,您可以让您的程序尝试就地解决它们。如果您的程序成功,您的程序可以报告零退出状态。
(编写良好的合并驱动程序并非易事,但对于您的特定情况,如果您使用 git merge-file
完成大部分工作,它可能不会那么糟糕。)
我的代码中有很长一行包含某些东西的 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 的默认内置合并驱动程序会发现冲突,将其声明为冲突,并将冲突标记留在工作树中的文件副本中。那是你一直在手动解决的问题。
如果您使用 the gitattributes file 将源文件标记为具有 合并驱动程序 ,但是,Git 使用您定义的合并驱动程序 而不是 的内置的。 Git 已在索引中包含文件的所有三个副本:
- 合并基础副本,来自共同的共享提交;
--ours
从HEAD
提交/当前分支复制;和- 您要合并的提交的
--theirs
副本。
Git 会将所有三个副本提取到临时文件,并使用这些临时文件的名称调用合并驱动程序。您的合并驱动程序必须:
- 找到基础文件与
ours
和theirs
副本的区别,以及 - 合并这些差异,将结果写入
ours
副本。
如果您的驱动程序发现冲突,您的驱动程序应该报告非零退出状态。如果没有,您的驱动程序应通过以零状态退出来报告成功。
也就是说,您需要重复标准低级驱动程序所做的工作。关键区别在于,如果有一行在两者中都发生了变化,并且 you 可以通过计算机程序解析,那么 standard低级驱动不行,你先解决吧
如果您不想重新编写所有标准的低级驱动程序,您可以先调用Git的低级合并驱动程序。它可以作为独立命令使用,git merge-file
。它会做与 Git 的内置低级驱动程序相同的事情,并且 return 也会有同样的退出状态。然后您可以检查该状态,如果它说存在合并冲突,您可以让您的程序尝试就地解决它们。如果您的程序成功,您的程序可以报告零退出状态。
(编写良好的合并驱动程序并非易事,但对于您的特定情况,如果您使用 git merge-file
完成大部分工作,它可能不会那么糟糕。)