Git如何解決沖突

2018-12-15 18:05 更新

當您在一個團隊中工作的時候,當有人將更改推送到您當前正在處理的文件時,您可能會遇到這種情況。如果這些更改不重疊(即對不同的代碼行進行了更改),則會自動合并沖突的文件。但是,如果同一行受到影響,則Git不能隨意選擇另一方,并要求您解決沖突。

在Git中,當您嘗試執(zhí)行下列操作之一時,沖突可能會出現(xiàn): pull、merge、rebase、cherry-pick、 unstash changes或者rapply a patch。如果存在沖突,這些操作將失敗,并且系統(tǒng)會提示您接受上游版本,首選版本或合并更改,如下圖:

201712150948426508

IntelliJ IDEA提供了一個本地解決沖突的工具。該工具由三個窗格組成。左側(cè)窗格顯示只讀本地副本;右窗格顯示簽入到存儲庫中的只讀版本。中央窗格顯示一個功能齊全的編輯器,其中顯示了合并和解決沖突的結(jié)果。最初,該窗格的內(nèi)容與該文件的基本修訂版本相同,也就是兩個沖突版本派生的版本。

Note:您可以將IntelliJ IDEA配置為始終自動應(yīng)用無沖突的更改,而不是從“合并”對話框中告訴它這樣做。為此,在"設(shè)置/首選項"對話框中,在左側(cè)窗格中展開:工具| “差異合并”節(jié)點,然后選擇“ 自動應(yīng)用非沖突更改”選項。

要解決沖突,請執(zhí)行以下操作:

  1. 在“文件合并沖突”對話框中單擊“合并 ” ,或在編輯器中選擇沖突的文件,然后主菜單中的選擇:“VCS” |<your_VCS> | 解決沖突。
  2. 要自動合并所有非沖突的更改,請單擊工具欄上的 (應(yīng)用所有非沖突更改)。您也可以使用 (從左側(cè)應(yīng)用非沖突性更改)和 (從右側(cè)應(yīng)用非沖突性更改)分別從對話框的左側(cè)/右側(cè)部分合并非沖突性更改。
  3. 要解決沖突,您需要選擇左側(cè)(本地)和右側(cè)(存儲庫)版本應(yīng)用(接受 或忽略 )的操作,然后在中央窗格中檢查結(jié)果代碼:
    Git沖突
    對于簡單的沖突(例如,如果同一行的開頭和結(jié)尾已在不同的文件修訂版中進行了修改),則可以使用“解決”選項,以便通過一次單擊來合并更改:此類沖突不是通過"應(yīng)用所有不沖突的更改" 操作解決的,因為您必須確保正確解決它們。

    Git沖突
  4. 比較不同的版本來解決沖突也可能是有用的。使用 工具欄按鈕來調(diào)用選項列表。請注意,Base引用的是本地和存儲庫版本的文件版本(最初顯示在中間的窗格中),而中間版本是指生成的版本。
  5. 在中央窗格中查看合并結(jié)果,然后單擊"應(yīng)用"。

您也可以右鍵單擊沖突并使用彈出式菜單中的命令。在“使用左解析”和“使用右解析”命令解析的解決方法提供了一個快捷方式,可以從一側(cè)接受更改,并分別從另一側(cè)忽略它們。

您可以使用一個工具欄來管理中心窗格中的更改,當您將鼠標光標懸停在裝訂線上的更改標記上,然后單擊它時,就會出現(xiàn)這種變化。工具欄與顯示已修改行的前一內(nèi)容的框架一起出現(xiàn):

Git沖突

處理與LF和CRLF行尾相關(guān)的沖突

通常情況下,在一個團隊中工作的人員使用不同的操作系統(tǒng)。這可能會導致行結(jié)束的問題,因為Unix,Linux和MacOS使用LF,并且Windows使用CRLF來標記行的末尾。

IntelliJ IDEA在差異查看器中顯示行結(jié)尾的差異,所以您可以手動修復它們。如果您希望Git自動解決這些沖突,則需要在Windows上將core.autocrlf屬性設(shè)置為true,和、并且在Linux和MacOS上將core.autocrlf屬性設(shè)置為input(有關(guān)更多詳細信息,請參閱處理行結(jié)束符)。您可以通過在Windows運行:git config --global core.autocrlf true,或者在Linux和MacOS上運行:git config --global core.autocrlf input來手動更改配置。

但是,IntelliJ IDEA可以自動分析您的配置,并警告您是否要提交CRLF到遠程存儲庫,并建議將core.autocrlf設(shè)置為true或input,具體取決于您的操作系統(tǒng)。

要啟用LF和CRLF行分隔符的智能處理,請打開"設(shè)置"對話框(Ctrl+Alt+S),然后在左邊選擇:版本控制|Git節(jié)點。如果CRLF行分隔符即將提交,請啟用“警告”選項。

啟用此選項后,除非在受影響的文件中設(shè)置了任何相關(guān)的Git屬性,否則IntelliJ IDEA將在每次要使用CRLF分隔符提交文件時顯示“行分隔符警告對話框”(在這種情況下,IntelliJ IDEA假定您清楚地理解你在做什么,并從分析中排除這個文件)。 

在“行分隔符警告對話框”中,單擊下列選項之一:

  • Commit As Is:是忽略警告并提交帶有CRFL分隔符的文件。
  • Fix and Commit(修復并提交):根據(jù)您的您的操作系統(tǒng)將core.autocrlf屬性設(shè)置為true或input。然后,CRLF行分隔符將在LF提交之前被替換。

如果稍后需要查看合并過程中的沖突究竟是如何解決的,則可以在“日志”視圖中找到所需的合并提交,在右側(cè)的“提交詳細信息”窗格中選擇具有沖突的文件,然后單擊 或按Ctrl+D (請參閱查看更改如何合并以獲取詳細信息)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號