如果我解决冲突它会改变Git责备吗?

mac*_*ost 5 git version-control merge-conflict-resolution git-blame

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

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

a();
b();
c();
Run Code Online (Sandbox Code Playgroud)

我在master中修改它:

a();
d();
c();
Run Code Online (Sandbox Code Playgroud)

但同事也是如此,他们在另一个分支中以不同的方式对其进行修改,然后将它们合并到master中:

a();
e();
c();
Run Code Online (Sandbox Code Playgroud)

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

a();
d();
c();
Run Code Online (Sandbox Code Playgroud)

git blamed();线,谁就会被指责:我和我的同事?

同样地,让我们说git感到困惑,并认为第一行和第二行都是冲突的:

<<<<
a();
d();
====
a();
e();
>>>>
Run Code Online (Sandbox Code Playgroud)

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

a();
e();
c();
Run Code Online (Sandbox Code Playgroud)

我是git blamea();条线路,我(该线路的原作者)会受到指责,还是我的同事(即使他们没有改变它们,最后"触及"它)会受到指责?

Enr*_*lio 7

TL;博士

如果您git blame在合并文件上运行,您将看到每行的原始作者,无论谁进行了合并提交.这意味着如果您的同事决定使用的线路版本解决冲突,您的名字将显示在旁边.

重建文件的历史记录

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

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

鉴于这两个事实,Git可以通过从给定提交向后走来重建文件中发生的更改的历史记录,在每个步骤生成文件的当前版本与其先前版本之间的差异.

这正是这样git blame做的.当您git blame对文件执行操作时,Git将逐行重建文件的历史记录,向您显示引入(即添加)每行的提交的作者.

合并提交

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

  • 合并的分支引用的提交,即左侧.
  • 由您合并的分支引用的提交,也就是右侧.

快照包含每侧组合的所有更改.

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

解决冲突时添加新行

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

  • 谢谢,这是一个完美的解释,正是我在寻找的! (2认同)