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 blame
的d();
线,谁就会被指责:我和我的同事?
同样地,让我们说git感到困惑,并认为第一行和第二行都是冲突的:
<<<<
a();
d();
====
a();
e();
>>>>
Run Code Online (Sandbox Code Playgroud)
如果我的同事用他们的版本解决冲突:
a();
e();
c();
Run Code Online (Sandbox Code Playgroud)
我是git blame
这a();
条线路,我(该线路的原作者)会受到指责,还是我的同事(即使他们没有改变它们,最后"触及"它)会受到指责?
如果您git blame
在合并文件上运行,您将看到每行的原始作者,无论谁进行了合并提交.这意味着如果您的同事决定使用您的线路版本解决冲突,您的名字将显示在旁边.
在Git中,每个提交都包含两个关键信息:
鉴于这两个事实,Git可以通过从给定提交向后走来重建文件中发生的更改的历史记录,在每个步骤生成文件的当前版本与其先前版本之间的差异.
这正是这样git blame
做的.当您git blame
对文件执行操作时,Git将逐行重建文件的历史记录,向您显示引入(即添加)每行的提交的作者.
合并提交包含对两个父项的引用:
快照包含每侧组合的所有更改.
如果你git blame
在合并提交上执行,Git将走两行历史记录,每个父提交一行.一旦Git到达其快照添加了某一行的提交,它将在该行旁边显示该提交的作者.
如果作为冲突解决的一部分添加了一个新行 - 即不属于合并任何一行的行 - 该行将属于合并提交本身引用的快照.在这种情况下,git blame
将报告该行的合并提交的作者.