PyCharm解決Git衝突

2023-04-06 12:00:25

技術背景

在前面的一篇部落格中,我們介紹了Fork到自己名下的本地倉庫如何與遠端原始倉庫建立連結的方法。在這篇文章中,我們將要講解如何應對在這種非同步開發的過程中經常有可能會遇到的Git衝突問題,在Pycharm這個專業的Python開發工具中整合了一些處理Git衝突的工具,讓我們一起來看看如何使用這個工具。

什麼時候會出現衝突

當我們從遠端的倉庫pull下來的時候,如果遠端倉庫跟本地倉庫修改了同一個檔案,在pull的過程中就會提示合併衝突:

$ git pull remote develop
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 27 (delta 10), reused 0 (delta 0), pack-reused 0
展開物件中: 100% (27/27), 18.44 KiB | 248.00 KiB/s, 完成.
來自 https://gitee.com/helloyesterday/mindsponge
 * branch            develop    -> FETCH_HEAD
刪除 mindsponge/system/dimension.py
自動合併 mindsponge/system/__init__.py
衝突(內容):合併衝突於 mindsponge/system/__init__.py
自動合併 mindsponge/__init__.py
衝突(內容):合併衝突於 mindsponge/__init__.py
自動合併失敗,修正衝突然後提交修正的結果。

這種型別的衝突一般需要我們去手動解決,我們可以先開啟這些提示合併衝突的檔案,看看合併衝突具體長什麼樣子:

# __init__.py
"""Molecular system"""

from .molecule import Molecule, Protein, RigidBody, GetAminoDihedrals
from .residue import Residue, AminoAcid

<<<<<<< HEAD
__all__ = ['Molecule', 'Protein', 'RigidBody', 'Residue', 'AminoAcid', 'DIMENSION', 'set_dimension', 'GetAminoDihedrals']
=======
__all__ = ['Molecule', 'Protein', 'Residue', 'AminoAcid']
>>>>>>> 0ab7841a7671881acf2a2e912bfabcea7e8096e4

可以看到這裡面多了三行非Python語法的標記,HEAD標記的是本地倉庫的修改,下面那個一串數位的對應的是遠端倉庫的修改內容。我們所要做的,就是把這三行非Python語法的程式碼去掉,然後把相應的程式碼做一個正確的修改。常見的修改策略有:直接採納遠端倉庫的修改,或者直接採納原生的修改,或者手動整合兩處的修改。

如何解決衝突

接下來看看具體如何解決當前的衝突。其實如果需要修改的地方並不多、程式碼也不是很複雜的情況,我們可以直接在編輯器裡面把相應的修改手動操作下,然後直接add-commit-push三步曲就推上去了,那接下來的方案也沒必要看了。但是如果是對於程式碼比較複雜的情況,建議採取如下方案,使用PyCharm自帶的衝突處理工具來解決Git衝突。首先點選Git -> Resolve Conflicts,然後會彈出如下的視窗:

這個視窗的內容是包含了所有含有待解決衝突的檔案資訊,我們可以在這個列表中逐一的進行修改。比如我們選中一個檔案,點選Merge,就會彈出來如下所示的對比視窗:

在這個對比視窗中,左邊的是本地修改後的內容,中間的是未發生該衝突的最後一個分支,右邊的是遠端修改後的內容。那麼此時操作上會容易很多,如果想要保留原生的修改,那就直接把原生的全選複製到中間的視窗中,選擇Apply即可。如果要保留遠端的修改,一樣的把右邊視窗的內容全選複製到中間result內容中即可。如果兩邊的修改內容都要保留,那就可以分別手動的去調整衝突,把相應的修改內容逐一複製到中間的result視窗中的相應位置,最後選擇Apply即可。

等到所有的衝突都處理完成之後,就可以add-commit-push三步曲了,如需rebase等操作,可以參考下此前的這一篇關於Git的部落格

總結概要

使用Git工具進行非同步開發的優點是非常顯而易見的,在開發效率和版本管理上得到非常大的進步。當然非同步開發過程中也難免會遇到一些開發衝突,比如兩個人同時修改了同一個檔案,那最終倉庫上的版本肯定只能保留一個版本,因此在pull下來的過程中就會提示合併衝突。此時可以使用PyCharm中的專業合併衝突解決工具來進行處理,該工具首先可以在介面上列舉出來所有包含衝突的檔案,其次是支援diff的介面,並且可以直接在介面上進行程式碼修改。通過三個介面上的程式碼可以清晰的看到非同步開發過程中的不同修改,以及衝突發生前的最後一個版本,使用起來邏輯清晰操作簡單,十分推薦。

版權宣告

本文首發連結為:https://www.cnblogs.com/dechinphy/p/pycharm-git.html

作者ID:DechinPhy

更多原著文章請參考:https://www.cnblogs.com/dechinphy/

打賞專用連結:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

騰訊雲專欄同步:https://cloud.tencent.com/developer/column/91958

CSDN同步連結:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343

51CTO同步連結:https://blog.51cto.com/u_15561675