如果我解决了一个冲突,它会改变Git的指责吗?
我试图弄清楚合并冲突是否是bug的原因,但我遇到了困难,因为我不清楚冲突解决如何影响如果我解决了一个冲突,它会改变Git的指责吗?,git,version-control,merge-conflict-resolution,git-blame,Git,Version Control,Merge Conflict Resolution,Git Blame,我试图弄清楚合并冲突是否是bug的原因,但我遇到了困难,因为我不清楚冲突解决如何影响git bull 假设我在master中有一个文件: a(); b(); c(); a(); d(); c(); 我在master中修改它: a(); b(); c(); a(); d(); c(); 但同事也是如此,他们在一个单独的分支中进行了不同的修改,然后合并到主分支中: a(); e(); c(); 解决冲突是否会影响责任?换句话说,如果我的同事通过使用我的版本来解决冲突: a(); d();
git bull
假设我在master中有一个文件:
a();
b();
c();
a();
d();
c();
我在master中修改它:
a();
b();
c();
a();
d();
c();
但同事也是如此,他们在一个单独的分支中进行了不同的修改,然后合并到主分支中:
a();
e();
c();
解决冲突是否会影响责任?换句话说,如果我的同事通过使用我的版本来解决冲突:
a();
d();
c();
而我git怪罪d()代码>行,谁会受到责备:我还是我的同事
类似地,假设git感到困惑,认为第一行和第二行都有冲突:
<<<<
a();
d();
====
a();
e();
>>>>
我git怪罪a()代码>行,我(行的原始作者)会受到指责吗,还是我的同事(最后“碰”了它,即使他们没有改变它)会受到指责?tl;博士
如果对一个合并文件运行git bull
,则无论合并提交的是谁,都会看到每一行的原始作者。这意味着,如果您的同事决定使用您的行版本解决冲突,您的姓名将显示在该行旁边
重建文件的历史记录
在Git中,每个提交包含两条关键信息:
- 提交时对工作目录快照的引用
- 对它之前的提交的引用,也称为其父级
给定这两个事实,Git可以通过从给定的提交向后走,在每一步生成文件当前版本和以前版本之间的差异,来重构文件中发生的更改的历史
这正是git责备所做的。当您对文件执行git责怪时,git将逐行重建文件的历史记录,向您显示引入(即添加)每一行的提交的作者
合并提交
合并提交包含对两个父级的引用:
- 由合并到的分支引用的提交,也就是左侧
- 合并的分支引用的提交,即右侧
快照包含来自各方面的所有更改
如果对合并提交执行git责备
,git将遍历两行历史记录,每个父提交一行。一旦Git到达commit,其快照添加了某一行,它将在该行旁边显示commit的作者
解决冲突时添加新行
如果作为冲突解决的一部分添加了新行(即不属于合并任何一方的行),则该行将属于合并提交本身引用的快照。在这种情况下,git-burn
将报告该行合并提交的作者。您可能会创建一个测试存储库来测试这一点。在master中创建一个文件。创建一个新分支并对其进行更改。切换回master并更改它。合并并解决冲突,并对文件执行git-dull
。事实上,你甚至不需要git服务器来托管存储库。我还没有测试过这一点,但我希望责怪
会引用解决冲突的人,因为解决之后是git add
。谢谢,这是一个完美的解释,正是我想要的!