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



我正试图弄清楚合并冲突是否是错误的原因,但我遇到了困难,因为我不清楚冲突解决方案如何影响git blame

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

a();
b();
c();

我在master中修改它:

a();
d();
c();

但同事也是如此,他们在一个单独的分支中对其进行了不同的修改,然后合并到主分支中:

a();
e();
c();

解决冲突会影响指责吗?换句话说,如果我的同事通过使用我的版本来解决冲突:

a();
d();
c();

而我git blame d();线,谁会受到指责:我还是我的同事?

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

<<<<
a();
d();
====
a();
e();
>>>>

如果我的同事解决了与他们版本的冲突:

a();
e();
c();

而我git blame a();行,我(该行的原作者(会受到指责吗?还是我的同事(最后一个"触摸"它的人,尽管他们没有更改它(会受到谴责?

tl;dr

如果在合并文件上运行git blame,则无论是谁执行了合并提交,都会看到每一行的原始作者。这意味着,如果你的同事决定使用你的版本的行来解决冲突,你的名字将显示在它旁边。

重建文件的历史记录

在Git中,每次提交都包含两条关键信息:

  • 提交时对工作目录的快照的引用
  • 对它之前的提交的引用,也就是它的父级

考虑到这两个事实,Git可以通过从给定的提交向后走来重建文件中发生的更改的历史,在每个步骤中生成文件的当前版本和以前版本之间的差异。

这正是git blame所做的。当你在一个文件上执行git blame时,Git将在的基础上逐行重建文件的历史记录,向你显示引入(即添加(每行的提交的作者。

合并提交

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

  • 合并到的分支引用的提交,也就是左侧
  • 合并的分支引用的提交,也就是右侧

快照包含每一侧的所有更改。

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

解决冲突时添加新行

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

相关内容

  • 没有找到相关文章

最新更新