查看分支与融合的差异?

我知道我可以看到HEAD和当前状态之间的区别与meld . 。 但是我怎样才能查看分支之间的差异,例如masterdevel与meld?

目前我执行以下步骤:

  1. 重命名工作副本的文件夹
    例如mv /projectA /projectA_master
  2. 再次克隆该项目
    git clone url
  3. 切换到devel分支
    cd projectA && git -b devel origin/devel
  4. 查看与meld的区别
    meld /projectA_Master projectA

没有一种更简单的方法来获得相同的结果吗? 我只需要它来审查更改,而不是主要用于合并。

我也发现这个问题烦人,所以我做了混帐融合,允许一个更舒适的方式区分工作树或暂存区域的任意提交。 你可以在https://github.com/wmanley/git-meldfind它。; 这有点像马克的脚本,但比较任何提交或暂存区域或工作目录与任何其他人。 如果你正在比较的东西之一是工作树,那么这是读写,所以你不会失去你的改变。

简短和甜蜜:

 git config --global diff.tool meld 

这个configurationGit使用meld作为diff工具。 (你不需要指定命令行参数, meld支持被内置到Git中。)

然后,如果你想要一个graphics比较,而不是一个文本,你只需调用git difftool而不是git diff (它们都采用相同的参数)。 在你的情况下:

 git difftool master..devel 

更新:如果你不想要一次一个文件比较,而是想用两个分支之间的所有变化来使用meld的“子目录”视图,请注意-d--dir-diff选项为git difftool 。 例如,当我在分支XYZ,我想看看这个和分支ABC之间有什么不同,我运行这个:

 git difftool -d ABC 

从git v1.7.11开始,你可以使用git difftool --dir-diff来执行目录diff。 这与https://github.com/wmanley/git-meld脚本融合很好。;

configurationgit

 git config --global diff.tool meld 

用它

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

对于macOS

 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 

说使用git difftool -d仍然可以在Meld中编辑你的工作文件并保存它们 ,这一点很重要。 为了实现这一点,你需要比较一些分支到你当前的工作树,例如:

 git difftool -d branchname 

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

然而更有趣的select是比较当前工作目录和存储。 你可以通过简单的input:

 git difftool -d stash 

然后,您可以将存储(左侧窗口)中的一些更改转移到当前工作副本(右侧窗口),而不使用git stash pop/apply并避免可能由此命令引发的令人烦恼的冲突解决。

我认为这可以大大提高工作stream程与存储。 您可以逐渐将更改从存储转移到工作副本,并逐个提交,如果需要,还可以引入其他更改。

虽然从其他答案看来,好像现在还没有办法直接在git仓库中执行此操作,但很容易(感谢其他问题的答案:))编写一个脚本,该脚本将提取两个提交的树到临时目录并在其上运行融合,当融合退出时删除两个目录:

http://gist.github.com/498628

当然,你将会失去通过融合所做的任何改变,但是我想,对于差异的快速回顾是相当不错的。

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

目标:比较branch_a和branch_b与meld的区别

 git checkout branch_a git checkout -b do_diff git reset --soft branch_b meld . 

在git V1.7.9中,你可以不用命令行来比较两个提交:

你必须在'git gui'编辑选项中configuration全局:“使用合并工具:meld”。

开始gitk ,select一个提交,右键单击另一个提交>“ diff this – > selected ”。 在“补丁”下右键单击文件>“ 外部差异 ”。

融合将启动并显示仍然选中,第一次提交在右侧。

如果你有干净的工作目录和干净的索引(或不关心它),那么这就是你想要的:

 git diff master..devel | patch -p1 && meld . && git reset --hard