当前位置: 首页 > news >正文

git 如何更可靠地解决冲突?

使用 git 合并代码时出现冲突是很常见的,不过如何解冲突才能更加可靠呢?不漏掉别人的修改,也同时让自己的修改完全保留。

本文将介绍利用各种工具更可靠地解决冲突。


本文内容

    • 使用 Visual Studio

使用 Visual Studio

如果你使用 Visual Studio,那么当合并两个分支出现冲突的时候,Visual Studio 的 Team Explorer 会显示当前冲突的所有文件。

Visual Studio 中的冲突文件
▲ 图 1

当你点击其中一个文件的 Merge 按钮的时候,会显示这个文件的合并界面。

在这里插入图片描述
▲ 图 2

可以看到,上图中两边的差异非常大。左边的代码进行了某项不为人知的修改,而右边的这些代码都被删除了。如果采用左边,则右边删除移走的代码就会留存,形成两份相似的代码;如果采用右边,那么左边在另一个分支的修改就会丢失。

这时,可以 和基准进行比较 来查看两个分支相对于同样的基准提交的差异来手动解决冲突。

点击合并页面顶部工具栏中的选择比较源按钮,可以切换比较代码的双方。

切换比较代码的双方

你可以比较“源”和“目标”,这也是默认的比较。你还可以选择比较“源”和“基准”、“目标”和“基准”。这样,你可以分别查看两边代码相比于同一个基准提交的修改。

在这里插入图片描述

对于左边的修改,通过查看“源”与“基准”的不同,得知左边其实值修改了一行。那么这时,我们把这一行重新补充到右边删除移走的代码里面(被移到了另一个文件中,需要补充到那个文件中对应的地方),那么两边的修改才真正时等价合并了。

你可以在下图看到这两个不同选项的理解。

git 合并过程


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • 文件被占用?系统自带的“资源监视器(resmon)”也能帮你找到占用它的真凶
  • Windows 系统文件资源管理器的命令行参数(如何降权打开程序,如何选择文件)
  • 为 .NET 各种开发工具设置网络代理,提升在大陆的网络性能
  • 如何在旧版本的 .NET Core / Framework 中使用 C# 8 的异步流(IAsyncDisposable / IAsyncEnumerable / IAsyncEnumerator)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • 为什么实现 .NET 的 ICollection 集合时需要实现 SyncRoot 属性?如何正确实现这个属性?
  • 为什么不应该公开用来同步的加锁对象?为什么不应该 lock(this)/lock(string) 或者 lock 任何非私有对象?
  • WPF 中如何创建忽略 DPI 属性的图片
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • Win32 方法 CreateFile 中选择合适的文件打开模式(CREATE_NEW, CREATE_ALWAYS, OPEN_EXISTING, OPEN_ALWAYS, TRUNCATE_EXI
  • 使用 Kestrel 为你的 ASP.NET Core 服务添加 https 支持
  • 三种方法为 ASP.NET Core 对外服务添加 https 支持(kestrel / frp / nginx)
  • 为 ASP.NET Core 程序制作 URL 的 301/302 跳转
  • 使用 Frp 为你的 Web 服务添加 https 支持
  • [Vue CLI 3] 配置解析之 css.extract
  • [译]Python中的类属性与实例属性的区别
  • 《Java编程思想》读书笔记-对象导论
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 〔开发系列〕一次关于小程序开发的深度总结
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • ES10 特性的完整指南
  • Java超时控制的实现
  • JAVA之继承和多态
  • Laravel 菜鸟晋级之路
  • mongo索引构建
  • 浮现式设计
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 排序算法之--选择排序
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微信公众号开发小记——5.python微信红包
  • Python 之网络式编程
  • 带你开发类似Pokemon Go的AR游戏
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • (3)STL算法之搜索
  • (C#)一个最简单的链表类
  • (第27天)Oracle 数据泵转换分区表
  • (二)构建dubbo分布式平台-平台功能导图
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (九)One-Wire总线-DS18B20
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转) Android中ViewStub组件使用
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)大型网站的系统架构
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 控制台应用程序读取配置文件app.config
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [20150321]索引空块的问题.txt
  • [20161101]rman备份与数据文件变化7.txt