Git - 可视化冲突解决工具P4Merge
P4Merge
P4Merge是Git的一个第三发Diff和Merge工具(可视化冲突解决工具).
下载地址: https://www.perforce.com/downloads/visual-merge-tool
安装的时候只需要勾选p4merge即可:

然后需要把p4merge的路径添加到环境变量PATH里面.
这样操作后, 就可以通过命令行启动p4merge了:

配置p4merge作为Git的diff tool:
git config --global diff.tool p4merge
git config --global difftool.p4merge.path "C:\Program Files\Perforce\p4merge.exe"
因为每次使用diff tool的时候, git会弹出确认框, 我们最好把这个确认框从全局范围内默认不启用:
git config --global difftool.prompt false
配置p4merge作为git的merge tool:
git config --global merge.tool p4merge
git config --global mergetool.p4merge.path "C:\Program Files\Perforce\p4merge.exe"
git config --global mergetool.prompt false
最后检查一下全局配置:
git config --global --list

OK.
下面准备一个项目, 现在的项目状态是:

添加一个README.md, 然后add并commit.
然后修改README.md 然后add
然后再修改README.md:

git status告诉我这个文件被修改了, 但是没有告诉我哪里被修改了.
为了知道更多的细节, 这里就需要使用 git diff命令了.
不加任何参数的情况下, 该命令
比较的是working directory里面, 被stage的变化 vs 没被stage的变化:

如果变化太多了显示不下, 想要退出的话, 就按q就行.
因为我配置了git difftool, 所以也可以使用 git difftool这个命令:

这就会弹出p4merge这个可视化工具, 可以清楚的看到变化.
左边的是stage的, 右边的是没有stage的.
比较working directory和最后一次commit:
git diff HEAD.

下面使用可视化的difftool: git difftool HEAD.

比较Staging 区和最后一次commit.
git diff --staged HEAD.

使用可视化工具: git difftool --staged HEAD:

只比较一个文件/路径.
再修改项目的另一个文件, 然后查看状态:

如果执行git diff的话, 那么两个文件都会被比较:

只想比较一个文件/路径的话就需要加参数:
git diff -- README.md:

也可以使用可视化工具:
git difftool -- README.md:

比较两个commit.
先查看历史: git log --oneline:

git diff xxx yyy
其中xxx和yyy都表示commit的 id, 最后一次commit可以用HEAD表示.

下面这个命令比较的是HEAD 和 HEAD的上一次:
git diff HEAD HEAD^.(这个命令在windows上可能有点问题, 请使用git bash):

使用可视化工具:
git difftool HEAD HEAD^:

HEAD^表示上一次commit, HEAD^^就表示上两次的commit, 以此类推, 也可以使用HEAD~2的形式, 它和HEAD^^是一样的. 也可以连着使用 HEAD^^~3就像当于HEAD^^^^^.
本地 vs 远程.
git diff master origin/master. (origin是远程github的引用名而已, 这个可以改.) 这就是比较本地和远程的master分支.

同样也可以使用可视化工具: git difftool master origin/master:

最后git push origin master.
本文就简单介绍了这些: p4merge, difftool, mergetool, git diff, git difftool, 各种情况的git diff.
Git - 可视化冲突解决工具P4Merge的更多相关文章
- 转:git合并冲突解决方法
git合并冲突解决方法 1.git merge冲突了,根据提示找到冲突的文件,解决冲突 如果文件有冲突,那么会有类似的标记 2.修改完之后,执行git add 冲突文件名 3.git commit注意 ...
- Git二进制文件冲突解决
Git二进制文件冲突解决 在我们合并分支的时候,如果两个分支都进行了修改那么就会产生合并冲突.对于非二进制文件的冲突解决,git会给出冲突的位置我们可以手动修改然后再commit.但是对于非二进制文件 ...
- Git 二进制文件冲突解决
Git 二进制文件冲突解决 在我们合并分支的时候,如果两个分支都进行了修改那么就会产生合并冲突.对于非二进制文件的冲突解决,git会给出冲突的位置我们可以手动修改然后再commit.但是对于非二进制文 ...
- git合并冲突解决方法
1.git merge冲突了,根据提示找到冲突的文件,解决冲突 如果文件有冲突,那么会有类似的标记 2.修改完之后,执行git add 冲突文件名 3.git commit 注意:没有-m选项 进去类 ...
- Git的冲突解决过程
下面图是我总结一次提交遇到冲突解决的过程. 1. 把本地工作区的修改提交到本地仓库 2. 从远程仓库拉取代码,与本地仓库合并(pull = fetch + merge) 3. 本地仓库的代码推送回工作 ...
- SourceTree配置BeyondCompare代码冲突解决工具
一.工具准备:SourceTree这个你得有.然后下载BeyondCompare(破解教程) 二.配置环境:SourceTree->工具->选项->比较,外部对比工具和合并工具都选择 ...
- git pull 冲突解决
这个意思是说更新下来的内容和本地修改的内容有冲突,先提交你的改变或者先将本地修改暂时存储起来. 处理的方式非常简单,主要是使用git stash命令进行处理,分成以下几个步骤进行处理. 1.先将本地修 ...
- git push冲突解决
1. 首先,可以试图用git push origin branch-name推送自己的修改:2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并:如果git pull提示 ...
- git pull冲突解决
场景:用户UserA修改了文件File1,用户UserB也修改了文件File1并成功merge到了服务器上,而UserA和UserB改动了同一个代码块,当UserA拉取代码时git无法merge此改动 ...
随机推荐
- qml 静态编译程序执行错误 无法定位程序输入点 CreateDXGIFactory2 于动态链接库 dxgi.dll 上
重新编译 qt 静态库即可,或 删除该动态库. -no-feature-d3d12 解决方案请参考如下网址: https://forum.qt.io/topic/78380/entry-point-n ...
- aforge 学习-基本图像处理要用的类库
1.图像灰度化:Grayscale.CommonAlgorithms.BT709(3种) FiltersSequence =new FiltersSequence(数组处理函数): 2.二值化(阈值 ...
- 《android开发进阶从小工到专家》读书笔记--HTTP网络请求
No1: 客户端与服务器的交互流程: 1)客户端执行网络请求,从URL中解析出服务器的主机名 2)将服务器的主机名转换成服务器的IP地址 3)将端口号从URL中解析出来 4)建立一条从客户端与Web服 ...
- UVa230 Borrowers
原题链接 UVa230 思路 这题输入时有一些字符串处理操作,可以利用string的substr()函数和find_last_of()函数更加方便,处理时不必更要把书名和作者对应下来,注意到原题书名的 ...
- hdu1496 打表
通常可以想到直接四个for枚举,但是会超时.就算只用三个for也很危险.可以用打表的方法将时间复杂度降到O(n^2),注意到x1,x2,x3,x4的取值区间是关于零对称的,因此可以只考虑正整数部分,洗 ...
- UVA-11882 bfs + dfs + 剪枝
假设当前已经到达(x,y),用bfs判断一下还可以到达的点有maxd个,如果maxd加上当前已经经过的长度小于当前答案的长度就退出,如果相同,就将bfs搜索到的点从大到小排序,如果连最大序列都无法大于 ...
- Flask下载文件
前言 由于最近在做文件管理模块的功能,所以难免会遇到文件上传下载这块的功能.不过文件上传那块是调用的OSS api,所以接触的不多. 文件的下载: 1. 接口返回真实的文件 这种情况比较简单, fla ...
- python高阶函数式编程
from functools import reduce def str2int(s): def fn(x, y): return x * 10 + y def char2num(s): return ...
- Web渗透测试(sql注入 access,mssql,mysql,oracle,)
Access数据库注入: access数据库由微软发布的关系型数据库(小型的),安全性差. access数据库后缀名位*.mdb, asp中连接字符串应用-- "Driver={micros ...
- linux shell中获取mongodb最大连接数、内存使用情况等
前两天接到了一个新的需求,需要在linux shell脚本中监控到mongodb最大连接数.内存使用情况等. 但是我对于linux shel很不了解,只是会一些简单常用的linux的操作而已,只要一顿 ...