如果我解决了一个冲突,它会改变Git的指责吗?

如果我解决了一个冲突,它会改变Git的指责吗?,git,version-control,merge-conflict-resolution,git-blame,Git,Version Control,Merge Conflict Resolution,Git Blame,我试图弄清楚合并冲突是否是bug的原因,但我遇到了困难,因为我不清楚冲突解决如何影响git bull 假设我在master中有一个文件: a(); b(); c(); a(); d(); c(); 我在master中修改它: a(); b(); c(); a(); d(); c(); 但同事也是如此,他们在一个单独的分支中进行了不同的修改,然后合并到主分支中: a(); e(); c(); 解决冲突是否会影响责任?换句话说,如果我的同事通过使用我的版本来解决冲突: a(); d();

我试图弄清楚合并冲突是否是bug的原因,但我遇到了困难,因为我不清楚冲突解决如何影响
git bull

假设我在master中有一个文件:

a();
b();
c();
a();
d();
c();
我在master中修改它:

a();
b();
c();
a();
d();
c();
但同事也是如此,他们在一个单独的分支中进行了不同的修改,然后合并到主分支中:

a();
e();
c();
解决冲突是否会影响责任?换句话说,如果我的同事通过使用我的版本来解决冲突:

a();
d();
c();
而我
git怪罪
d()行,谁会受到责备:我还是我的同事

类似地,假设git感到困惑,认为第一行和第二行都有冲突:

<<<<
a();
d();
====
a();
e();
>>>>
git怪罪
a()行,我(行的原始作者)会受到指责吗,还是我的同事(最后“碰”了它,即使他们没有改变它)会受到指责?

tl;博士 如果对一个合并文件运行
git bull
,则无论合并提交的是谁,都会看到每一行的原始作者。这意味着,如果您的同事决定使用您的行版本解决冲突,您的姓名将显示在该行旁边

重建文件的历史记录 在Git中,每个提交包含两条关键信息:

  • 提交时对工作目录快照的引用
  • 对它之前的提交的引用,也称为其父级
给定这两个事实,Git可以通过从给定的提交向后走,在每一步生成文件当前版本和以前版本之间的差异,来重构文件中发生的更改的历史

这正是git责备所做的。当您对文件执行
git责怪时,git将逐行重建文件的历史记录,向您显示引入(即添加)每一行的提交的作者

合并提交 合并提交包含对两个父级的引用:

  • 由合并到的分支引用的提交,也就是左侧
  • 合并的分支引用的提交,即右侧
快照包含来自各方面的所有更改

如果对合并提交执行
git责备
,git将遍历两行历史记录,每个父提交一行。一旦Git到达commit,其快照添加了某一行,它将在该行旁边显示commit的作者

解决冲突时添加新行
如果作为冲突解决的一部分添加了新行(即不属于合并任何一方的行),则该行将属于合并提交本身引用的快照。在这种情况下,
git-burn
将报告该行合并提交的作者。

您可能会创建一个测试存储库来测试这一点。在master中创建一个文件。创建一个新分支并对其进行更改。切换回master并更改它。合并并解决冲突,并对文件执行
git-dull
。事实上,你甚至不需要git服务器来托管存储库。我还没有测试过这一点,但我希望
责怪
会引用解决冲突的人,因为解决之后是
git add
。谢谢,这是一个完美的解释,正是我想要的!