技术背景

在前面的一篇博客中,我们介绍了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

PyCharm解决Git冲突的更多相关文章

  1. 解决 Git 冲突的 14 个建议和工具

    Git 非常善于合并代码.代码的合并在本地完成,快速而且灵活.正常情况下每次从不同分支合并内容时,冲突有可能会发生.通常解决冲突很简单,就如同知道(如何)选择(保留)重要的更改一样,而有时解决冲突则需 ...

  2. eclipse解决git冲突举例

    本地修改了两个文件,提交时提示有冲突,想来应该是没有从远程仓库下载最新代码导致的.通过右击项目 -> Team -> Sychronized WorkSpace,比较本地仓库和远程仓库的异 ...

  3. 解决git冲突

    多个开发者同时操作git中的同一个文件,第一个人在commit和push的时候是可以正常提交的,而之后的开发者执行pull,就会报冲突异常conflict. 解决方案: 全部采用当前更改 之后再去gi ...

  4. 解决git冲突造成的Please move or remove them before you can merge

    git clean -d -fx “” 其中x —–删除忽略文件已经对git来说不识别的文件d —–删除未被添加到git的路径中的文件f —–强制运行如果你确定这货已经没用了,并且git status ...

  5. idea 解决git冲突

    1.提交本地代码到本地仓库 2.啦取远程代码 不进行merge 3.冲突文件会显示   >>> head  ===== 4.删除  >>> head  ===== ...

  6. SourceTree + Beynod Compare解决Git冲突的方法

    https://www.cnblogs.com/yufeng218/p/6523422.html

  7. Git版本控制:Git冲突解决 相关错误总结

    http://blog.csdn.net/pipisorry/article/details/46958699 冲突处理 git push冲突处理 git push时出现冲突:! [rejected] ...

  8. git冲突Please move or remove them before you can merge

    解决Git冲突造成的Please move or remove them before you can merge git clean -d -fx ""其中x -----删除忽略 ...

  9. git冲突解决、线上分支合并、luffy项目后台登陆注册页面分析引入

    今日内容概要 git冲突解决 线上分支合并 登陆注册页面(引入) 手机号是否存在接口 腾讯云短信申请 内容详细 1.git冲突解决 1.1 多人在同一分支开发,出现冲突 # 先将前端项目也做上传到 g ...

  10. [git]解决rebase冲突

    git pull --rebase时产生冲突 有三个选项: git rebase --skip 效果是:抛弃本地的commit,采用远程的commit(慎用因为你本地的修改就会都没有!) git re ...

随机推荐

  1. jmeter dubbo测试

    一.环境准备 1.安装jmeter 2.安装dubbo插件,下载地址jmeter-plugins-dubbo, 将jar包放入${JMETER_HOME}\lib\ext路径下,重启即可 二.添加一个 ...

  2. axios使用总结

    一.请求配置 // 引入import axios from 'axios';import qs from 'qs';this.$axios({ method:"get", // g ...

  3. 基于MassTransit.RabbitMQ的延时消息队列

    1 nuget包 <PackageReference Include="MassTransit.RabbitMQ" Version="8.0.2" /&g ...

  4. css穿透

    https://www.cnblogs.com/linjiangxian/p/13183412.html

  5. 彻底解决impdp还原数控时提示不让写日志的问题ORA-39064

    之前通过impdp导入时一直没问题,突然今天导入时出现了问题,如下: 加权限.换空间.用其他用户均失败.   后来在网上找的大部分都是说字符集什么的,如果是字符集的问题那我之前导入应该就有问题,不可能 ...

  6. filter CTF

    filter CTF 输入url http://dc1ce3ad-eed4-48fd-a068-71aef12f7654.node.vaala.ink?file=demo.php 参考题目filter ...

  7. 优先使用C++的别名声明(using)来替换typedef

    C++98中,我们如果想用简写的方式表达一个类型,那么可以使用typedef关键字: typedef std::unique_ptr<std::unordered_map<std::str ...

  8. 10.7 2020 实验 5:OpenFlow 协议分析和 OpenDaylight 安装

    一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接:通过抓包获取 OpenFlow 协议,验证 OpenFlow 协议和版本,了解协议内容 ...

  9. protobuf怎么处理java中的Object和Object[],protobuf的bytestring和object[]

    如题,作者一开始也遇到了这个比较棘手的问题. 话不多说,直接说解决方案. 这里使用bytestring,如果是object[]的话则用repeated定义即可. 那么问题又来了,用这个类型怎么做到与j ...

  10. SpringSecurity登录验证,多个用户表

    在开始之前我想感叹一句,技术久了不回头看看真的会忘记的,这次公司让我重新开发一个程序,项目架构为单体多模块开发,其中有个需求就是需要不同用户表进行登录,且不同表的用户名.手机号都可以重复. 这样的需求 ...