我试图弄清楚合并冲突是否导致了错误,但我遇到了困难,因为我不清楚冲突解决如何影响git blame
.
假设我在 master 中有一个文件:
a();
b();
c();
我在master中修改:
a();
d();
c();
但同事也是如此,他们在一个单独的分支中以不同的方式对其进行修改,然后将其合并到 master 中:
a();
e();
c();
解决冲突会影响指责吗?换句话说,如果我的同事通过使用我的版本解决了冲突:
a();
d();
c();
and I git blame
the d();
线,谁会受到指责:我还是我的同事?
同样,假设 git 感到困惑,认为第一行和第二行是冲突的:
<<<<
a();
d();
====
a();
e();
>>>>
如果我的同事解决了与他们的版本的冲突:
a();
e();
c();
and I git blame
the a();
这条线,我(该线的原作者)会受到指责,还是我的同事(最后“接触”它,即使他们没有改变它)会受到指责?
tl;dr
如果你跑git blame
在合并文件上,您将看到original每行的作者,无论谁进行了合并提交。这意味着,如果您的同事决定使用以下方式解决冲突your该行的版本,您的名字将显示在它旁边。
重建文件的历史记录
在 Git 中,每次提交都包含两个关键信息:
- 参考一个snapshot提交时的工作目录。
- 对其之前的提交的引用,也称为其parent.
鉴于这两个事实,Git 可以通过以下方式重建文件中发生的更改历史记录:倒着走从给定的提交开始,每一步都会生成文件的当前版本与其前一个版本之间的差异。
这正是git blame
做。当你这样做时git blame
对于一个文件,Git 将重建该文件的历史记录逐行基础上,向您显示引入的提交的作者(即added)每一行。
合并提交
合并提交保存对两个父级的引用:
- 您的分支引用的提交并入,又名left side.
- 您的分支引用的提交merged,又名right side.
快照包含双方合并后的所有更改。
如果你做一个git blame
on a 合并提交,Git 将遍历两行历史记录,一行对应父提交。一旦 Git 到达其快照的提交added某一行,它会在该行旁边显示该提交的作者。
解决冲突时添加新行
If a new line– 这是一条不属于合并任何一方的行 – 作为冲突解决方案的一部分添加,该行将属于合并提交本身引用的快照。在这种情况下git blame
将报告该行的合并提交的作者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)