使用 SourceTree 修復 git 的合并沖突

這篇教程不是救急方案。如果你在尋找救急方案,我建議你現在就點擊瀏覽器的返回按鈕。如果你想詳細了解如何使用 SourceTree 解決 git 中的合并沖突,本教程會教你怎么做。深吸一口氣!

git 中為什么會出現合并沖突?

很簡單。當 git 不知道如何自動合并某個文件的多處改動的時候,就會引發沖突。即使有時合并方式是非常顯而易見的。通常會發生在多人修改同一個文件時。

具體來說,git 中的合并沖突會發生在這些場景中:

  1. 合并兩個分支的時候。
  2. 回滾區塊的時候(我最喜歡的功能)

我們會討論這兩種場景,以及可能導致合并沖突的其他場景。

開始吧!

合并沖突會先顯示這條消息

發生這種情況時不要驚慌。這只是一個臨時狀態。即使你在合并的時候搞錯了,也總是可以重置分支(如下圖顯示)以返回合并開始之前的狀態。

現在點擊 “Working Copy” 分區。你會看到受合并沖突影響的文件都在左側有個感嘆號。

現在有多種方式可以解決沖突,按個看一遍

使用 SourceTree 解決 git 中的合并沖突

1)使用 “mine” 或 “theirs” 來解決

這是修復 git 中的合并沖突最簡單的方式。如果你右擊任意有沖突的文件,它會在 “Resolve Conflicts” 下面顯示兩個選項。

  • Resolve using ‘Mine’
  • Resolve using ‘Theirs’

“Mine” 表示沖突文件在你當前分支上的內容。“Theirs” 表示沖突文件在傳入分支上的內容——嘗試合并到當前分支的那個分支。

注意:如果是回滾操作,“Theirs” 表示沖突文件在回滾區塊上的內容。

所以,通過選擇 “Mine” 或 “Theirs”,你只是指示 git 丟棄其中一個版本,并使用另外那個版本。

如何決定選擇哪個版本?

下個問題你可能要問,我怎么知道該選擇哪個版本——“Mine” 還是 “Theirs”?

大部分情況下,你應該已經知道怎么做,因為你知道每個分支中提交的內容。那就可以跳過這個部分。但如果不是,也不要擔心。選擇沖突的文件,然后可以在右側看到文件的內容。

仔細注意這里的模式,你會在每個有合并沖突的文件中看到它。

<<<<<<< HEAD
...content on current branch...
=======
...content on incoming branch...
>>>>>>> change (or the name of whatever your incoming branch is)

你可以把 HEAD 看作當前分支。在上面的例子里,就是 “master” 分支。

從 <<<<<<< HEAD 到 ======= 那行之間的就是當前分支上的內容。從 ======= 到 >>>>>>> 你的傳入分支名之間的就是傳入分支上的內容(在上面的例子中就是 “change”)

還要記住在用 SourceTree 讀取文件的時候,可以跳過紅色標注的行,因為它們已經被刪了。綠色標注的那些是新添加的。

你可能正在處理一個巨大的文件,在多個部分有多個沖突,那么 SourceTree 里面的視圖可能不夠用。對于這些情況,我推薦下面的兩種方法。

2)使用手動編輯方法解決

我最喜歡這種方法。最開始有點難以掌握,但熟悉后就會成為解決 git 中的合并沖突最靈活的方法。

在你最喜歡的編輯器或 IDE 中打開沖突的文件。

確保刪除掉具有特殊字符和分支名稱 /HEAD 的那幾行。進行更改直到對文件的最終狀態感到滿意。保存文件。

這是我手動編輯文件后的最終版本。

回到 SourceTree,在 “unstaged files” 區域里選擇沖突的文件。拖到上面的 “staged files” 區域里面。或者也可以右擊文件,然后選擇 Resolve Conflicts > Mark Resolved。

現在可以進行提交了,沖突已經被手動解決了。耶!

3)使用外部合并工具解決

還可以啟動外部合并工具來解決沖突。它們通常會讓你選擇某一個版本,或者兩者都選。目前 SourceTree 好像并不支持這個功能。

如果在合并過程中搞錯了怎么辦?

只要沒有提交,就可以從頂部菜單中選擇 “Reset All”。然后就可以重新開始分支合并操作,一切都將從頭來過。

如果還有問題的話,在下方評論,希望能幫助到你。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • git多人合作開發項目中,經常會遇到需要合并分支。因為可能會對同一個文件進行了修改,git merge --no-...
    一畝三分甜閱讀 7,131評論 3 7
  • 一、基本概念: 注:對于git的分布式概念及其優點,不重復說明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大廠offer閱讀 1,442評論 0 3
  • &開發過程中離不開源代碼的管理, 目地:為了解決在軟件開發過程中,由源代碼引發的各種蛋疼、繁瑣的問題。 目前開發使...
    早起的蟲兒子被鳥吃閱讀 2,459評論 0 16
  • 源代碼管理工具的起源 為什么會出現源代碼管理工具? 為了解決在軟件開發過程中,由源代碼引發的各種蛋疼繁瑣問題 源代...
    小白文_Vincent閱讀 3,214評論 2 8
  • 之前在協同開發中遇到過這樣的一個問題,在使用git合并代碼時會覆蓋掉其他同事的代碼,剛開始接觸的時候用的是命令行,...
    陳煦緣閱讀 27,221評論 0 18