![](/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.