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

Git合并利器:Vimdiff使用指南

使用 vimdiff 作为 Git 的合并工具确实可能会让新手感到困惑,但它是一个功能强大的工具,一旦掌握了它,就可以非常高效地进行代码合并和比较。以下是一个简短的教程,旨在帮助理解 vimdiff 的基本用法以及如何利用它来进行 Git 合并。

Git配置

在开始之前,需要知道如何将vimdiff设置为Git的合并工具。具体步骤如下:

git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false

这将把Git设置为默认的合并工具,在合并时显示共同祖先,并禁用打开vimdiff的提示。

  • git config merge.tool vimdiff: 这会将 vimdiff 设置为默认的合并工具。
  • git config merge.conflictstyle diff3: 这会告诉 Git 在合并冲突时显示共同祖先的版本,这样就可以看到两个分支以及它们的共同起点的内容。
  • git config mergetool.prompt false: 这会禁用打开合并工具时的提示,Git 将自动打开 vimdiff 而不询问是否想要继续。

完成这些设置后,当运行 git mergetool 命令来解决合并冲突时,Git 将自动使用 vimdiff 来打开有冲突的文件。

创建合并冲突

下面用一个例子举例:

创建一个名为"zoo"的目录,并进入"zoo"目录,然后初始化Git仓库,最后新建一个animals.txt

mkdir zoo  # 
cd zoo
git init
vi animals.txt

在文件中添加一些动物信息后并保存:

cat
dog
octopus
octocat

之后提交该文件

git add animals.txt
git commit -m "Initial commit"

添加文件animals.txt到Git,提交文件,并附上消息"Initial commit"。

创建一个名为"octodog"的分支,并切换到"octodog"分支,并打开文件animals.txt,并将"octopus"改为"octodog"。

git branch octodog
git checkout octodog
vi animals.txt  # let's change octopus to octodog

添加文件animals.txt到Git,提交文件,并附上消息"Replace octopus with an octodog"。

git add animals.txt
git commit -m "Replace octopus with an octodog"

切换到"master"分支,打开文件animals.txt,并将"octopus"改为"octoman"。

git checkout master
vi animals.txt  # let's change octopus to octoman

添加文件animals.txt到Git,提交文件,并附上消息"Replace octopus with an octoman"。

git add animals.txt
git commit -m "Replace octopus with an octoman"

合并"octodog"分支到"master"分支。

git merge octodog  # merge octodog into master

此时,会得到一个合并错误:

Auto-merging animals.txt
CONFLICT (content): Merge conflict in animals.txt
Automatic merge failed; fix conflicts and then commit the result.

这表明在animals.txt文件中存在合并冲突。

使用vimdiff解决merge冲突

解决这个冲突可以输入以下命令:

git mergetool

执行上述命令后,Git会尝试使用vimdiff作为合并工具来解决冲突。vimdiff会打开一个窗口,显示两个版本的文件,中间会有冲突标记。需要手动比较这两个版本,并选择一个解决方案来替换冲突的部分。使用 hjkl 键在窗口之间导航,使用 :diffget LOCAL:diffget REMOTE:diffget BASE 来将对应窗口的内容复制到 MERGED 窗口中。解决冲突后,保存并关闭文件,Git会提示你提交冲突的解决结果。

上述窗口看起来很迷糊,其实很好理解,下面解释一下都有什么。从左到右,从上到下:

  1. LOCAL:
    • 这是当前分支(通常是执行 git merge 命令时所在的分支)的文件内容。
    • 在合并过程中,这代表了您的最新更改。
  2. BASE:
    • 这是两个分支的共同祖先的文件内容。
    • 它显示了自从两个分支从共同点分开以来,发生了哪些变化。
  3. REMOTE:
    • 这是试图合并进来的分支的文件内容。
    • git merge 命令中,`` 就是这里的 REMOTE
  4. MERGED:
    • 这是合并后的文件内容将显示的地方。
    • 目标是将 LOCALREMOTE 的更改合并到这个窗口中,以解决所有冲突。

假设想要保留“octodog”的更改(来自REMOTE)。为此,将光标移动到MERGED文件(Ctrl + w, j),然后移动到合并冲突区域。接着,可以选择保留LOCAL版本、BASE版本或REMOTE版本中的哪一部分,或者合并这些内容。完成后,保存并关闭文件,Git会提示你提交冲突的解决结果。

:diffget RE

这会将REMOTE中相应的更改添加到MERGED文件中,也可以:

`:diffg RE` - 从REMOTE获取内容
`:diffg BA` - 从BASE获取内容
`:diffg LO` - 从LOCAL获取内容

这些命令允许快速地从一个特定的版本中获取内容,并将其应用于MERGED区域。一旦解决了所有的冲突,保存并关闭文件,Git会提示提交冲突的解决结果。

保存文件并退出(快速写入并退出多个文件的方法是::wqa)。一旦解决了所有冲突并保存了文件后运行git commit,完成这些步骤后,就成功地解决了合并冲突,并将更改提交到了 Git 仓库。

以下是一些其他的命令:

  • 使用:diffthis命令来打开两个版本之间的差异,这样可以更清楚地看到差异。
  • 使用:nextdiffto命令来切换到下一个差异,这样可以逐步解决多个冲突。
  • 使用:diffoff命令来关闭差异显示,这样可以更专注于编辑。
  • 使用:diffmerge命令来合并两个版本,这将覆盖当前的MERGED区域。
  • 使用:diffmergeoff命令来关闭合并显示,这样可以回到正常的编辑模式。

参考

  • https://www.rosipov.com/blog/use-vimdiff-as-git-mergetool/

相关文章:

Git合并利器:Vimdiff使用指南

使用 vimdiff 作为 Git 的合并工具确实可能会让新手感到困惑,但它是一个功能强大的工具,一旦掌握了它,就可以非常高效地进行代码合并和比较。以下是一个简短的教程,旨在帮助理解 vimdiff 的基本用法以及如何利用它来进行 Git 合并…...

阿里云2核4G服务器租用价格_30元3个月_165元一年_199元

阿里云2核4G服务器租用优惠价格,轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月,活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图: 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…...

<QT基础(2)>QScrollArea使用笔记

项目需要设置单个检查的序列图像预览窗口,采用QScrollArea中加入QWidget窗口,每个窗口里面用Qlabel实现图像预览。 过程涉及两部分内容 引入QWidget 引入label插入图像(resize) 引入布局 组织 scrollArea内部自带Qwidget&#…...

springboot企业级抽奖项目业务四 (缓存预热)

缓存预热 为什么要做预热: 当活动真正开始时&#xff0c;需要超高的并发访问活动相关信息 必须把必要的数据提前加载进redis 预热的策略: 在msg中写一个定时任务 每分钟扫描一遍card_game表 把(开始时间 > 当前时间)&& (开始时间 < 当前时间1分钟)的活动及相…...

opejdk11 java 启动流程 java main方法怎么被jvm执行

java启动过程 java main方法怎么被jvm执行 java main方法是怎么被jvm调用的 1、jvm main入口 2、执行JLI_Launch方法 3、执行JVMInit方法 4、执行ContinueInNewThread方法 5、执行CallJavaMainInNewThread方法 6、创建线程执行ThreadJavaMain方法 7、执行ThreadJavaMain方法…...

link 样式表是否会阻塞页面内容的展示?取决于浏览器,edge 和 chrome 会,但 firefox 不会。

经过实测&#xff1a; 在 head 中 link 一个 1M 大小的样式表。设置网络下载时间大概为 10 秒。 edge 和 chrome 只有在下载完样式表后&#xff0c;页面上才会出现内容。而 firefox 可以直接先显示内容&#xff0c;然后等待样式表下载完成后再应用样式。 DOMContentLoaded 事…...

uniapp对接极光推送(国内版以及海外版)

勾选push&#xff0c;但不要勾选unipush 国内版 网址&#xff1a;极光推送-快速集成消息推送功能,提升APP运营效率 (jiguang.cn) 进入后台&#xff0c;并选择对应应用开始配置 配置安卓包名 以及ios推送证书&#xff0c;是否将生产证书用于开发环境选择是 ios推送证书…...

智慧城市数字孪生,综合治理一屏统览

现代城市作为一个复杂系统&#xff0c;牵一发而动全身&#xff0c;城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维&#xff0c;从构成城市诸多要素、结构、功能等方面入手&#xff0c;系统推进…...

在Java中对SQL进行常规操作的通用方法

SQL通用方法 一、常规方法增删改查二、具体优化步骤1.准备工作2.getcon()方法&#xff0c;获取数据库连接对象3.closeAll()方法&#xff0c;关闭所有资源4.通用的增删改方法5.通用的查询方法6.动态查询语句 总结 一、常规方法增删改查 在常规方法中&#xff0c;我们在Java中对…...

JavaSE day16笔记 - string

第十六天课堂笔记 学习任务 Comparable接口★★★★ 接口 : 功能的封装 > 一组操作规范 一个抽象方法 -> 某一个功能的封装多个抽象方法 -> 一组操作规范 接口与抽象类的区别 1本质不同 接口是功能的封装 , 具有什么功能 > 对象能干什么抽象类是事物本质的抽象 &…...

java将文件转成流文件返回给前端

环境&#xff1a;jdk1.8&#xff0c;springboot2.5.3,项目端口号&#xff1a;9100 1.待转换的文件 一、路径 二、文件内容 2.controller中代码 package com.example.pdf.controller;import com.example.pdf.service.GetFileStreamService; import org.springframework.web.b…...

使用Node.js常用命令提高开发效率

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;广泛用于构建服务器端应用程序和命令行工具。Node.js提供了丰富的命令和工具&#xff0c;可以帮助开发者更高效地开发应用程序。在日常开发中&#xff0c;除了Node.js本身的核心功能外&#xff0c;npm&#x…...

百度资源平台链接提交

百度资源平台是百度搜索引擎提供的一个重要工具&#xff0c;用于帮助网站主将自己的网站链接提交给百度搜索引擎&#xff0c;以便更快地被收录和展示在搜索结果中。以下将就百度资源平台链接提交的概念、操作方法以及其对网站收录和曝光的影响进行探讨&#xff1a; 什么是百度资…...

力扣爆刷第108天之CodeTop100五连刷26-30

力扣爆刷第108天之CodeTop100五连刷26-30 文章目录 力扣爆刷第108天之CodeTop100五连刷26-30一、15. 字符串相加二、300. 最长递增子序列三、42. 接雨水四、43. 重排链表五、142. 环形链表 II 一、15. 字符串相加 题目链接&#xff1a;https://leetcode.cn/problems/add-strin…...

Android裁剪图片为波浪形或者曲线形的ImageView

如果需要做一个自定义的波浪效果的进度条&#xff0c;裁剪图片&#xff0c;对ImageView的图片进行裁剪&#xff0c;比如下面2张图&#xff0c;如何实现&#xff1f; 先看下面的效果&#xff0c;看到其实只需要对第一张高亮的图片进行处理即可&#xff0c;灰色状态的作为背景图。…...

Linux课程____shell脚本应用

:一、认识shell 常用解释器 Bash , ksh , csh 登陆后默认使用shell&#xff0c;一般为/bin/bash&#xff0c;不同的指令&#xff0c;运行的环境也不同 二、 编写简单脚本并使用 # vim /frist.sh //编写脚本文件&#xff0c;简单内容 #&#xff01;/bin/bash …...

设计模式12--组合模式

定义 案例一 案例二 优缺点...

【微服务】软件架构的演变之路

目录 单体式架构的时代单体式架构(Monolithic)优点缺点适用场景单体式架构面临诸多问题1.宽带提速&#xff0c;网民增多2.Web2.0时代的特点问题描述优化方向 集群优点缺点适用场景搭建集群后面临诸多问题用户请求问题用户的登录信息数据查询 改进后的架构 垂直架构优点缺点 分布…...

安全算法 - 加密算法

加密算法是一种在信息安全领域中广泛应用的算法&#xff0c;能够将数据进行加密转换&#xff0c;以保证数据的保密性和安全性。 它具有保密性、对称加密和非对称加密、密钥管理、数据完整性和认证等重要特点和应用。 加密算法可以分为对称加密和非对称加密两种类型&#xff1…...

安全算法 - 国密算法

国密算法是中国自主研发的密码算法体系&#xff0c;包括对称加密算法、非对称加密算法和哈希算法。其中&#xff0c;国密算法采用SM4作为对称加密算法&#xff0c;SM2作为非对称加密算法&#xff0c;以及SM3作为哈希算法。国密算法在信息安全领域具有重要意义和广泛应用&#x…...

蓝桥杯2014年第十三届省赛真题-武功秘籍

一、题目 武功秘籍 小明到X山洞探险&#xff0c;捡到一本有破损的武功秘籍&#xff08;2000多页&#xff01;当然是伪造的&#xff09;。他注意到&#xff1a;书的第10页和第11页在同一张纸上&#xff0c;但第11页和第12页不在同一张纸上。 小明只想练习该书的第81页到第92页的…...

Could not initialize class java.awt.Font

项目场景&#xff1a; 项目场景&#xff1a;java项目在web端导出Excel、Word、PDF等文档 问题描述 在Windows系统中开发以及运行文件导出正常&#xff0c;单机部署到Linux中或者使用docker部署后&#xff0c;导出报错。 异常&#xff1a; eleasing transactional SqlSession…...

Mysql or与in的区别

创建一个表格 内涵一千万条数据 这张表中&#xff0c;只有id有建立索引&#xff0c;且其余都没有 测试1&#xff1a;使用or的情况下&#xff0c;根据主键进行查询 可以看到根据主键id进行or查询 花费了30-114毫秒&#xff0c;后面30多毫秒可能是因为Mysql的Buffer Pool缓冲池的…...

STM32——USART

一、通信 1.1通信是什么&#xff1b; 通信是将一个设备的数据发送到另一个设备中&#xff0c;从而实现硬件的扩展&#xff1b; 1.2通信的目的是什么&#xff1b; 实现硬件的扩展-在STM32中集成了很多功能&#xff0c;例如PWM输出&#xff0c;AD采集&#xff0c;定时器等&am…...

WebCopilot:一款功能强大的子域名枚举和安全漏洞扫描工具

关于WebCopilot WebCopilot是一款功能强大的子域名枚举和安全漏洞扫描工具&#xff0c;该工具能够枚举目标域名下的子域名&#xff0c;并使用不同的开源工具检测目标存在的安全漏洞。 工具运行机制 WebCopilot首先会使用assetsfinder、submaster、subfinder、accumt、finddom…...

HarmonyOS实战开发-如何实现一个支持加减乘除混合运算的计算器。

介绍 本篇Codelab基于基础组件、容器组件&#xff0c;实现一个支持加减乘除混合运算的计算器。 说明&#xff1a; 由于数字都是双精度浮点数&#xff0c;在计算机中是二进制存储数据的&#xff0c;因此小数和非安全整数&#xff08;超过整数的安全范围[-Math.pow(2, 53)&#…...

每日OJ题_子序列dp⑥_力扣873. 最长的斐波那契子序列的长度

目录 力扣873. 最长的斐波那契子序列的长度 解析代码 力扣873. 最长的斐波那契子序列的长度 873. 最长的斐波那契子序列的长度 难度 中等 如果序列 X_1, X_2, ..., X_n 满足下列条件&#xff0c;就说它是 斐波那契式 的&#xff1a; n > 3对于所有 i 2 < n&#x…...

病毒循环Viral Loop是什么?为何能实现指数增长

一、什么是病毒循环&#xff08;Viral Loop&#xff09;&#xff1f; 病毒循环&#xff08;Viral Loop&#xff09;是一种机制&#xff0c;它推动连续的推荐以实现持续增长。 它会促使你现有的客户推荐其他人&#xff0c;去认识你的品牌&#xff0c;然后让这些新客户进一步告诉…...

下载huggingface中数据集/模型(保存到本地指定路径)

一. snapshot_download # 1.安装huggingface_hub # pip install huggingface_hubimport osfrom huggingface_hub import snapshot_downloadprint(downloading entire files...) # 注意&#xff0c;这种方式仍然保存在cache_dir中 snapshot_download(repo_id"ibrahimhamam…...

HarmonyOS实战开发-使用List组件实现导航与内容联动的效果。

1 卡片介绍 使用ArkTS语言&#xff0c;实现一个导航与内容二级联动的效果。 2 标题 二级联动&#xff08;ArkTS&#xff09; 3 介绍 本篇Codelab是主要介绍了如何基于List组件实现一个导航和内容的二级联动效果。样例主要包含以下功能&#xff1a; 切换左侧导航&#xff…...

怎样开发手机网站建设/网推怎么做

2019独角兽企业重金招聘Python工程师标准>>> 普通的表格 Markdown 代码:| 一个普通标题 | 一个普通标题 | 一个普通标题 | | ------ | ------ | ------ | | 短文本 | 中等文本 | 稍微长一点的文本 | | 稍微长一点的文本 | 短文本 | 中等文本 |一个普通标题一个普通标…...

太原网站建设方案书/亿驱动力竞价托管

概述Singleton模式要求一个类有且仅有一个实例&#xff0c;并且提供了一个全局的访问点。这就提出了一个问题&#xff1a;如何绕过常规的构造器&#xff0c;提供一种机制来保证一个类只有一个实例&#xff1f;客户程序在调用某一个类时&#xff0c;它是不会考虑这个类是否只能有…...

网站关键词优化是什么/快速排名工具免费

本篇文章给大家带来的内容是关于Vue.js路由器的使用方法总结(附代码)&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。是用于 路由器的无刷新跳转改变 标签默认显示标签标签默认显示 Dom 为 主页通过 tag 属性可以改变 如&…...

linux做网站服务器/seo研究中心论坛

通晓JDK源码在当下到底有多重要&#xff1f;跳槽面试方面2023年金三银四即将来临&#xff0c;这项内容在现在的Java面试中肯定是跑不掉的。毫不夸张地说&#xff0c;现在只要面试Java相关的岗位&#xff0c;肯定或多或少都会涉及JDK源码相关的问题。个人工作方面JDK作为一个我们…...

小型网站建设需要多少钱/百度一下百度知道

在PHP中有个叫做strtotime的函数。strtotime 实现功能&#xff1a;获取某个日期的时间戳&#xff0c;或获取某个时间的时间戳。strtotime 将任何英文文本的日期时间描述解析为Unix时间戳[将系统时间转化成unix时间戳。一&#xff0c;获取指定日期的unix时间戳strtotime("2…...

wordpress 粘贴代码/seo海外推广

图片右边加两行文字 先来一个效果图&#xff1a; 下面来看代码 wxml <view class"view_tupian_wenzi"><image class"image_1" src"../images/main_yewu.png" /><view class"view_wenzi2"><text>服务项目&l…...