查看分支与融合的差异?

Mar*_*uer 149 git diff branch meld

我知道我可以查看HEAD和当前状态之间的区别meld ..但是,如何查看分支之间的差异,例如masterdevelmeld?

目前我执行以下步骤:

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

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

Jör*_*tag 307

简短而甜蜜:

git config --global diff.tool meld
Run Code Online (Sandbox Code Playgroud)

这将Git配置为meld用作diff工具.(您不需要指定命令行参数,meldGit中内置了支持.)

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

git difftool master..devel
Run Code Online (Sandbox Code Playgroud)

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

git difftool -d ABC
Run Code Online (Sandbox Code Playgroud)

  • @MartenBauer我认为这就是你想要的:git difftool --dir-diff master devel (14认同)
  • 那不是我想要的.它按文件显示差异文件.我之前用脚本diff.py和'git diff master..devel'存档了它.我希望看到所有的差异和目录树为'meld folderA/folderB /'. (3认同)
  • 可以这样做以便当前分支不在tmp文件夹中,从而允许编辑吗? (2认同)

Gut*_*nYe 99

从git v1.7.11开始,您可以使用它git difftool --dir-diff来执行目录diff.这对于没有https://github.com/wmanley/git-meld脚本的meld非常有用.

配置git

git config --global diff.tool meld
Run Code Online (Sandbox Code Playgroud)

用它

git difftool -d topic             // -d is --dir-diff
git difftool -d master..topic
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

  • 可以这样做,以便当前分支不在tmp文件夹中,因此允许编辑吗? (5认同)
  • 我认为这正是OP想要的.注意-g选项使用guidiff工具和-d选项来使用--dir-diff.这对于进行代码审查很有用.Nit:指定-d时不需要difftool.prompt选项,至少对于Git 1.8. (2认同)
  • 我也非常感谢@zkent问题的答案... :( (2认同)
  • @zkent @tavlima:该命令已经允许您在当前版本上进行编辑。即使您看到一个tmp floder进入融合,如果您将-Ctrl + s保存在右侧,您的文件也会被修改。 (2认同)

Wil*_*ley 53

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

  • 从命中github存储库引用Will:"注意:git-meld已经过时,因为git difftool在git 1.7.11中学习了--dir-diff选项." (26认同)

Pio*_*icz 12

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

git difftool -d branchname
Run Code Online (Sandbox Code Playgroud)

Meld将显示左右目录都位于/ tmp中.但是,右侧目录中的文件实际上是指向当前工作目录中文件的符号链接(不适用于Windows).因此,您可以直接在Meld中编辑它们,当您保存它们时,您的更改将保存在您的工作目录中.

更有趣的选择是当前工作目录与藏匿的比较.只需键入以下内容即可完成此操作:

git difftool -d stash
Run Code Online (Sandbox Code Playgroud)

然后,您可以将一些更改从存储(左侧窗口)传输到当前工作副本(右侧窗口),而无需使用git stash pop/apply和避免可能由此命令引起的麻烦的冲突解决方案.

我认为它可以显着提升带有藏匿处的工作流程.您可以逐步将更改从存储转移到工作副本,并逐个提交,如果需要,可以引入其他更改.

  • 将新文件从分支复制到工作目录不起作用:( (2认同)

Mar*_*air 5

Although it seems from the other answers as if there's not a way to do this directly in the git repository at the moment, it's easy (thanks to the answer to another question :)) to write a script that will extract the trees of two commits to temporary directories and run meld on them, removing both directories when meld exits:

http://gist.github.com/498628

Of course, you'll lose any changes made via meld, but it's quite nice for a quick overview of the differences, I think.


rea*_*ime 5

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

目标:将branch_a和branch_b之间的差异与meld进行比较

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

84245 次

最近记录:

6 年,9 月 前