技术背景
在前面的一篇博客中,我们介绍了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,然后会弹出如下的窗口:
![](/i/l/?n=23&i=blog/2277440/202304/2277440-20230406094320364-769628114.png)
这个窗口的内容是包含了所有含有待解决冲突的文件信息,我们可以在这个列表中逐一的进行修改。比如我们选中一个文件,点击Merge,就会弹出来如下所示的对比窗口:
![](/i/l/?n=23&i=blog/2277440/202304/2277440-20230406094954291-1698457091.png)
在这个对比窗口中,左边的是本地修改后的内容,中间的是未发生该冲突的最后一个分支,右边的是远程修改后的内容。那么此时操作上会容易很多,如果想要保留本地的修改,那就直接把本地的全选复制到中间的窗口中,选择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
标签:27,修改,Git,mindsponge,冲突,https,PyCharm From: https://www.cnblogs.com/dechinphy/p/pycharm-git.html