我试图弄清楚 merge 冲突是否是导致错误的原因,但我遇到了困难,因为我不清楚冲突解决如何影响 git blame
。
假设我在 master 中有一个文件:
a();
b();
c();
我在master中修改:
a();
d();
c();
但同事也是如此,他们在一个单独的分支中对其进行了不同的修改,然后将其 merge 到 master 中:
a();
e();
c();
解决冲突会影响 blame 吗?换句话说,如果我的同事通过使用我的版本解决了冲突:
a();
d();
c();
我 git blame
d();
行,谁会受到指责:我还是我的同事?
同样,假设 git 感到困惑,认为第一行和第二行都冲突了:
<<<<
a();
d();
====
a();
e();
>>>>
如果我的同事解决了与他们版本的冲突:
a();
e();
c();
我 git blame
a();
行,我(该行的原作者)会受到 blame ,还是我的同事(“触及” “最后,即使他们没有改变它)得到 blame ?
最佳答案
tl;博士
如果您在 merge 后的文件上运行 git blame
,您将看到每一行的原始作者,无论 merge 提交的是谁。这意味着如果您的同事决定使用您的版本的行来解决冲突,您的名字将显示在它旁边。
重建文件的历史
在 Git 中,每个提交都包含两个关键信息:
- 对提交时工作目录的快照的引用。
- 对其之前的提交的引用,也就是它的父级。
鉴于这两个事实,Git 可以通过从给定的提交向后走来重构文件中发生的更改历史,在每个步骤中生成文件的当前版本与其前一个版本之间的差异.
这正是 git blame
所做的。当您对文件执行 git blame
时,Git 将逐行 重建文件的历史记录,向您显示引入的提交的作者(即 em>添加) 每行。
merge 提交
merge 提交包含对两个父项的引用:
- 您 merge 到的分支引用的提交,也就是左侧。
- 您 merge 的分支引用的提交,也就是右侧。
快照包含来自每一方的所有更改。
如果您在 merge 提交 上执行git blame
,Git 将遍历两条历史记录,一条用于每个父提交。一旦 Git 到达其快照添加特定行的提交,它将在该行旁边显示该提交的作者。
解决冲突时添加新行
如果一个新行——即不属于 merge 任何一方的行——被添加为冲突解决的一部分,则该行将属于 merge 提交本身。在这种情况下,git blame
将报告该行的 merge 提交的作者。
关于git - 如果我解决了冲突,它会改变 Git Blame 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770806/