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的更多相关文章

  1. 转:git合并冲突解决方法

    git合并冲突解决方法 1.git merge冲突了,根据提示找到冲突的文件,解决冲突 如果文件有冲突,那么会有类似的标记 2.修改完之后,执行git add 冲突文件名 3.git commit注意 ...

  2. Git二进制文件冲突解决

    Git二进制文件冲突解决 在我们合并分支的时候,如果两个分支都进行了修改那么就会产生合并冲突.对于非二进制文件的冲突解决,git会给出冲突的位置我们可以手动修改然后再commit.但是对于非二进制文件 ...

  3. Git 二进制文件冲突解决

    Git 二进制文件冲突解决 在我们合并分支的时候,如果两个分支都进行了修改那么就会产生合并冲突.对于非二进制文件的冲突解决,git会给出冲突的位置我们可以手动修改然后再commit.但是对于非二进制文 ...

  4. git合并冲突解决方法

    1.git merge冲突了,根据提示找到冲突的文件,解决冲突 如果文件有冲突,那么会有类似的标记 2.修改完之后,执行git add 冲突文件名 3.git commit 注意:没有-m选项 进去类 ...

  5. Git的冲突解决过程

    下面图是我总结一次提交遇到冲突解决的过程. 1. 把本地工作区的修改提交到本地仓库 2. 从远程仓库拉取代码,与本地仓库合并(pull = fetch + merge) 3. 本地仓库的代码推送回工作 ...

  6. SourceTree配置BeyondCompare代码冲突解决工具

    一.工具准备:SourceTree这个你得有.然后下载BeyondCompare(破解教程) 二.配置环境:SourceTree->工具->选项->比较,外部对比工具和合并工具都选择 ...

  7. git pull 冲突解决

    这个意思是说更新下来的内容和本地修改的内容有冲突,先提交你的改变或者先将本地修改暂时存储起来. 处理的方式非常简单,主要是使用git stash命令进行处理,分成以下几个步骤进行处理. 1.先将本地修 ...

  8. git push冲突解决

    1. 首先,可以试图用git push origin branch-name推送自己的修改:2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并:如果git pull提示 ...

  9. git pull冲突解决

    场景:用户UserA修改了文件File1,用户UserB也修改了文件File1并成功merge到了服务器上,而UserA和UserB改动了同一个代码块,当UserA拉取代码时git无法merge此改动 ...

随机推荐

  1. 深度学习中batch normalization

    目录 1  Batch Normalization笔记 1.1  引包 1.2  构建模型: 1.3  构建训练函数 1.4  结论 Batch Normalization笔记 我们将会用MNIST数 ...

  2. PAT1078 Hashing 坑爹

    思路:用筛法给素数打表,二次探测法(只需要增加的)–如果的位置被占,那么就依次探测. 注意:如果输入的,这也不是素数:如果,你需要打表的范围就更大了,因为不是素数. AC代码 #include < ...

  3. webpack代码分离 ensure 看了还不懂,你打我(转)

    webpack异步加载的原理 webpack ensure相信大家都听过.有人称它为异步加载,也有人说做代码切割,那这 个家伙到底是用来干嘛的?其实说白了,它就是把js模块给独立导出一个.js文件的, ...

  4. The Windows account sa does not exist and cannot be provisioned as a SQL Server system administrator

    今天遇到一个案例,在使用命令修改一个测试服务器(SQL Server 2014标准版)的服务器排序规则时,遇到了下面错误信息 (具体账号信息脱敏处理,随机生成一个账号密码) The Windows a ...

  5. 小说接入UC浏览器内核技术对话(二)

    质辛@灿岩 质辛跟我们说一下那个删除文件的逻辑吧质辛@灿岩  应该不是删除cache下所有文件吧?质辛质辛@智鹰  提供一下我们的临时文件完整路径给 灿岩吧质辛@智鹰  是负责我们ucsdk的 技术对 ...

  6. FusionCharts中图的属性的总结归纳

    FusionCharts中图的属性的总结归纳 1.横坐标label间隔显示 labelStep="4" 2.柱状图有椭圆角 useRoundEdges="1"

  7. Java中替换HTML标签的方法

    1.替换HTML标签 replaceAll("\\&[a-zA-Z]{0,9};", "").replaceAll("<[^>]* ...

  8. Java中list.get(index)报错

    1.list.get(index)中的index为负值异常 严重:Exception occurred during processing request:-1 java.lang.ArrayInde ...

  9. Procedure execution failed 2013 - Lost connection to MySQL server during query

    1 错误描述 Procedure execution failed 2013 - Lost connection to MySQL server during query 2 错误原因 由错误描述可知 ...

  10. vue cli创建的项目 当你后期使用了ES6语法,如何解决浏览器兼容问题

    最近开发了一个项目,开发过程中,由于需要使用了async await ,于是发现,只有少数的浏览器支持,极大多数的浏览器是不支持这玩意的,在网上各种找解决方案,基本都是失败,最后总结了两个方案之后,尝 ...