![](/img/trans.png)
[英]Confusing JSONException: Expected ':' after (lots of invalid unicode characters)
[英]Lots of confusing git conflicts
您的 diff3 屏幕截图提供了答案。 (旁白:不要在这里使用屏幕截图。直接剪切并粘贴文本。在这种情况下,应该删除带有行号的装订线信息,但这没关系。请参阅我如何提出一个好问题。)
请记住,在 Git 中,合并是关于合并工作。 涉及三个提交:
你,在你的分支上,从一些提交开始。 Git 将此称为合并基础提交。
他们在他们的分支上,从这个相同的 commit开始。
所以 Git 首先运行两个git diff
命令(或内部等效命令)。 一个将此合并基础与您的代码版本进行比较,第二个git diff
将此合并基础与其代码版本进行比较。
我将从中间冲突开始。
diff3 风格的 diff 包括合并基本代码(来自提交ce442625
),我们可以在其中阅读——我已经重新输入了这个,所以我可能添加了一些错别字1——原行说:
chage_lang.setOnClickListener { openDialogToSelectLang() }
这显然是有缺陷的:它应该读取change_lang
而不是chage_lang
。
在您的提交中,在 HEAD 中,您保留了这一行,但在其后添加了一个空行。 这是一个“差异大块”。
在他们的提交中,在feature/dark_mode
中,他们修复了拼写并将单个空行替换为非空行,以获得:
change_lang.setOnClickListener { openDialogToSelectLang() }
change_theme.setOnClickListener { openDialogToSelectTheme() }
在这里,Git 不知道是保留您添加的空行,还是保留它们的删除和替换空行; 它不知道是保留错误的拼写chage_lang
还是使用更正的拼写change_lang
。 所以就产生了冲突:你必须select正确的分辨率。
就在这之下,最后一个冲突是相似的:合并基础版本说:
android:layout_marginTop="@dimen/standard_margin"
android:background="@color/white"
在您的版本中,您将“第一行”更改为“8dp”并保持第二行不变,但在他们的版本中,他们保持第一行不变并删除了第二行。再一次,Git 不知道是否接受您的版本,他们的版本,两者的某种组合,或者什么。您必须在此处选择正确的分辨率。
第一个差异是最令人困惑的:这里,从合并基础版本中获取的行集是空的。 您这边的变化是您添加了一个空白行,而他们添加了一个非空白行阅读:
setBackgroundColor(ContextCompat.getColor(context, ...
与其他两种情况一样,Git 不知道它是否应该添加您的空白行,或者他们的行,或者两者,或者两者都不,或者什么。 你必须选择。
编辑有问题的文件以具有正确的组合(并且不再包含冲突标记),或使用合并工具来实现相同的效果。 然后在生成的文件上使用git add
,或使用合并工具(可能是相同的合并工具,全部作为一件事)运行git add
for you 。 git add
更新 Git暂存区中的文件副本,以便 Git 知道正确的分辨率。
(Git 假设您告诉它的任何内容都是正确的,因此请确保您在这里告诉它正确的内容,换句话说,确保整个文件是正确的。通常这意味着您应该在给它之前测试您的合并分辨率Git. That's one reason I don't like git mergetool
: you do the merge, and then git mergetool
immediately tells Git it's right, and if it's not right, you have to start over. 2 )
1这种拼写错误的风险是“询问”页面建议使用剪切和粘贴的原因。
2您可以只使用这一个文件重新开始,和/或编辑和调试它而无需重新创建冲突,但现在更难看到原始的三个输入文件。 使用git checkout -m
重新创建冲突有效,但这会失去您的解决方案。 一旦你确切地知道你和 Git 正在做什么,所有这些都有解决方法,但总的来说,整个用户体验对我来说似乎很糟糕。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.