默认的git diff命令只会将文件的修改差异使用“+”,“-”符号标注出来,并不直观。

最理想的方式应该是使用诸如“DiffMerge”这样的对比工具将原始文件和修改后的文件左右并列显示,这样就能从全局上非常明显地看出哪里是修改的,哪里是删除的。

遗憾的是Git本身并没有自带这样的对比工具,但是它支持使用外部对比工具来达到这个目的,参考:How do I view 'git diff' output with my preferred diff tool/ viewer?

另外,还有一些第三方工具也支持并列对比显示。

DiffMerge

配置Git使用DiffMerge作为Diff工具。

在.gitconfig文件中添加如下配置:

[diff]
tool = diffmerge [difftool "diffmerge"]
cmd = 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' \"$LOCAL\" \"$REMOTE\" [difftool]
prompt = false

保存文件,执行git config --global --list查看具体配置信息:

diff.tool=diffmerge
difftool.diffmerge.cmd='C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' "$LOCAL" "$REMOTE"
difftool.prompt=false

到Git仓库目录下执行git difftool命令即可打开DiffMerge界面,查看当前修改过的文件差异对比。

不完美的是,每次只能查看一个文件的差异对比。如果同时有多个文件存在改动,会针对每一个文件依次打开一次DiffMerge窗口(关闭当前DiffMerge窗口之后会立即打开一个新的DiffMerge窗口)。

使用这种方式还可以配置其他外部Diff工具进行文件差异对比,如:Meld,Beyond Compare等等。

Icdiff

icdiff是一个在命令下可以实现文件左右并列对比的工具,需要独立安装,详见:https://github.com/jeffkaufman/icdiff

安装icdiff:

pip install https://github.com/jeffkaufman/icdiff.git

如果无法直接通过pip安装,可以下载icdiff源码进行安装。

tar xvf icdiff-release-2.0.4.tar.gz
cd icdiff-release-2.0.4
python setup.py build
python setup.py install

在.gitconfig文件中添加如下配置:

[icdiff]
options = --highlight --line-numbers

保存文件,执行git config --global --list查看具体配置信息:

icdiff.options=--highlight --line-numbers

到Git仓库目录下执行git icdiff命令即可展示左右并列的文件差异对比,从上到下依次展示每一个有改动的文件对比信息。

值得注意的是:icdiff并不会展示文件的全部信息,只会展示有差异的一段数据,但是这样也比原生的git diff命令直观了许多。

可以说,icdiff是命令行下使用Git diff的不二选择!

webdiff

webdiff也是一个独立的差异对比的工具,与Icdiff不同的是,webdiff是通过打开一个浏览器页面来展示文件差异的,也是一种图形化的展示方式,详见:https://github.com/danvk/webdiff

另外,webdiff会把当前所有改动的文件列表展示出来,只要单击选择指定文件就可以通过左右并列的方式查看该文件的差异对比了,这一点比通过DiffMerge对比更加友好。

安装webdiff:

pip install webdiff

安装好webdiff之后无需做任何配置,直接到Git仓库目录下执行git webdiff命令即可打开一个浏览器页面,在该页面中会列出当前有改动的文件列表。

遗憾的是,我在Windows 10环境使用webdiff时总是提示“read-error”错误(无法读取需要对比的文件),暂时还不知道具体原因。

SmartGit

SmartGit是一个非常高级的工具,它已经集成了Git,文件diff只是其中的一部分很小的功能,详见:https://www.syntevo.com/smartgit/

SmartGit的diff功能非常直观,会列出当前所有改动的文件列表,只需要点击某一个文件就能以左右并列的方式查看该文件的修改差异,而且展示的是文件的全部信息,能从全局上知道文件的改动位置。

SmartGit是商业软件,但是易用性真的非常诱人!

【参考】

https://blog.csdn.net/azhong148/article/details/87736788 git diff 比较文件的工具 DiffMerge 安装配置使用

https://www.jianshu.com/p/ec0da9b08b52 设置git diff用beyond compare工具比较

Git差异并列显示的更多相关文章

  1. 解决 git 中文路径显示 unicode 代码的问题

    解决 git 中文路径显示 unicode 代码的问题 当被修改的文件中带有中文字符时,中文字符会被转换为 unicode 代码,看不出原来的文件名. 这时,只要配置 :: git config -- ...

  2. git log友好显示

    查看commit 提交日志 $ git log $git log --pretty=oneline $git reflog 显示所有提交记录,包括已经回退的提交,如图:提交了abc 和 bb 然后回退 ...

  3. Windows下Git中正确显示中文的设置方法

    Windows下Git中正确显示中文的设置方法 具体设置方法如下: 进入目录etc:$ cd /etc 1. 编辑 gitconfig 文件:$ vi gitconfig.在其中增加如下内容: [gu ...

  4. [转载]centos 6.4中git如何正常显示中文

    FROM: http://ju.outofmemory.cn/entry/63250 系统版本:centos 6.4 git版本:1.7.1,使用yum直接安装的. 当使用git status查看时, ...

  5. Git文件不显示图标/标识

    初次使用Git服务功能,做了很多探路事情,记录下刚刚遇到的问题 情况:安装了Git应用程序,或者也安装了TortoiseGit-1.8.16.0-64bit(类似SVN工具)后,上传下载文件没有问题, ...

  6. Git差异比对

    一. 查看变更还未载入(changed but unstaged,当前没有add 的内容)的文件比对: 只需运行不带任何参数的'git diff'命令即可 二. 查看载入(stage,即已经add)而 ...

  7. Git diff结果显示分析

    1.diff的三种格式: 正常格式(normal diff) 上下文格式(context diff) 合并格式(unified diff) 2.示例文件为了便于讲解,先新建两个示例文件.第一个文件叫做 ...

  8. git branch 不显示的原因

    转自:https://blog.csdn.net/qq_39671159/article/details/81261049 必须使用git init命令创建仓库,执行git add . 和git co ...

  9. 解决Win10 Git图标不显示问题

    升级系统到win10 1803版本以后发现TortoiseGit的忽略图标不显示了 开始以为是版本问题,将TortoiseGit版本进行了升级还是不行 网上查找以后发现 Windows Explore ...

随机推荐

  1. processon刷文件的骚操作

    https://github.com/ilikly/ProcessOnRegister用法自己看说明哈,群友亲测可用,而且也给别人用了...缺点是每轮都需要手动操作一下,并且需要俩微信号

  2. 使用idea创建Kotlin项目

    1.打开idea 2.选择项目方式: 3.nest 4.创建文件名 4.finish 看这目录结构和java没什么区别 5.在src目录下新建一个Kotlin文件 fun main(args:} fu ...

  3. Python 3 快速入门 1 —— 数据类型与变量

    本文假设你已经有一门面向对象编程语言基础,如Java等,且希望快速了解并使用Python语言.本文对重点语法和数据结构以及用法进行详细说明,同时对一些难以理解的点进行了图解,以便大家快速入门.一些较偏 ...

  4. LOJ #6207 - 米缇(杜教筛+拉格朗日插值)

    LOJ 题面传送门 首先将 \(\sigma_k(ij)\) 展开: \[\sigma_k(ij)=\sum\limits_{x\mid i}\sum\limits_{y\mid j}[x\perp ...

  5. Oracle-怎么在表的特定位置增加列

    create table tmp as select ID,UserName,RealName,Sex,Tel,Addr from tabName;drop table tabName;rename ...

  6. C4.5决策树-为什么可以选用信息增益来选特征

    要理解信息增益,首先要明白熵是什么,开始很不理解熵,其实本质来看熵是一个度量值,这个值的大小能够很好的解释一些问题. 从二分类问题来看,可以看到,信息熵越是小的,说明分类越是偏斜(明确),可以理解为信 ...

  7. 字符scanf 的输入注意

    1.注意scanf 不能有空格,如果有空格会将空格给输入进去 scanf("d "):---有空格 和scanf("d");--没有空格 有很大的区别

  8. JForum论坛安装以及部署

    转载链接:https://blog.csdn.net/jhyfugug/article/details/79467369 首先安装JForum之前,先准备好安装环境Windows7+JDK+Tomca ...

  9. 几种常用JavaScript设计模式es6

    设计模式分类(23种设计模式) 创建型 单例模式 原型模式 工厂模式 抽象工厂模式 建造者模式 结构型 适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式 行为型 观察者模式 迭 ...

  10. 什么是 IP 地址 – 定义和解释

    IP 地址定义 IP 地址是一个唯一地址,用于标识互联网或本地网络上的设备.IP 代表"互联网协议",它是控制通过互联网或本地网络发送的数据格式的一组规则. 本质上,IP 地址是允 ...