关于git:查看分支与meld的差异?

View differences of branches with meld?

我知道我可以用meld .来观察头部和当前状态之间的区别。但是,我如何看待分支之间的区别,例如使用meld的masterdevel

目前,我执行以下步骤:

  • 重命名工作副本文件夹
    例如mv /projectA /projectA_master)
  • 再次克隆项目
    江户十一〔四〕号
  • 切换到devel分支
    埃多克斯1〔6〕
  • 使用meld查看差异
    江户十一〔七〕号
  • 有没有一种更简单的方法可以在meld中得到相同的结果?我只需要它来检查更改,而不是主要用于合并。


    短&甜:

    1
    git config --global diff.tool meld

    这将Git配置为使用meld作为diff工具。(您不需要指定命令行参数,对meld的支持内置于git中。)

    然后,如果您想要一个图形化的差异而不是文本化的差异,您只需调用git difftool而不是git diff(它们都采用相同的参数)。在您的情况下:

    1
    git difftool master..devel

    更新:如果您不想一次一个文件的diff,而是想使用meld的"子目录"视图处理两个分支之间的所有更改,请注意-d--dir-diff选项用于git difftool。例如,当我在分支XYZ上时,我想看看这个和分支ABC之间有什么不同,我运行这个:

    1
    git difftool -d ABC


    从Git v1.7.11开始,您可以使用git difftool --dir-diff执行目录差异,这与meld wihout https://github.com/wmanley/git-meld脚本非常有效。

    配置Git

    1
    git config --global diff.tool meld

    用它

    1
    2
    git difftool -d topic             // -d is --dir-diff
    git difftool -d master..topic

    对于MacOS

    1
    2
    3
    brew cask install meld
    git config --global difftool.meld.cmd 'open -W -a Meld --args "$LOCAL" "$PWD/$REMOTE"'
    git config --global difftool.meld.trustExitCode true


    我还发现这个问题很烦人,所以我做了Gitmeld,它允许一种更舒适的方式来区分针对工作树或临时区域的任意提交。你可以在https://github.com/wmanley/git-meld上找到它。这有点像Mark的脚本,但可以将任意提交、临时区域或工作目录与其他任何提交、临时区域或工作目录进行比较。如果您比较的对象之一是工作树,那么它也是读写的,这样您就不会丢失所做的更改。


    重要的是,使用git difftool -d,您仍然可以在meld中编辑工作文件并保存它们。为了实现这一点,您需要将一些分支与当前的工作树进行比较,例如:

    1
    git difftool -d branchname

    meld将显示左右目录都位于/tmp中。但是,右目录中的文件实际上是指向当前工作目录中文件的符号链接(不适用于Windows)。所以您可以在meld中对它们进行编辑,当您保存它们时,所做的更改将保存在您的工作目录中。

    然而,更有趣的选择是将当前的工作目录与stash进行比较。您只需键入:

    1
    git difftool -d stash

    然后,您可以将一些更改从stash(左窗口)转移到当前工作副本(右窗口),而无需使用git stash pop/apply,并避免由此命令引起的麻烦冲突解决。

    我认为它可以显著地提高隐藏工作流程。您可以逐步将更改从存储转移到工作副本,并逐个提交,如果需要,还可以引入其他更改。


    虽然从其他答案来看,目前似乎没有直接在Git存储库中执行此操作的方法,但编写一个脚本很容易(由于另一个问题的答案:)将两个提交的树提取到临时目录并在其上运行meld,在meld退出时删除这两个目录:

    网址:http://gist.github.com/498628

    当然,您将丢失通过meld所做的任何更改,但我认为,对于快速概述这些差异是非常好的。


    我认为这样做的一个简单方法是使用git reset --soft

    目标:比较分支机构A和分支机构B与MELD之间的差异

    1
    2
    3
    4
    git checkout branch_a
    git checkout -b do_diff
    git reset --soft branch_b
    meld .


    在Git v1.7.9中,您可以比较两次提交而不使用命令行:

    您必须在"git-gui"编辑选项中配置全局:"使用合并工具:meld"。

    启动gitk,选择一个提交,右键单击另一个提交>"diff this-->selected"。在"patch"下,右键单击一个文件>"external diff"。

    meld将启动并显示仍然选定的,首先在右侧提交。