当前位置:  开发笔记 > 后端 > 正文

查看分支与融合的差异?

如何解决《查看分支与融合的差异?》经验,为你挑选了5个好方法。

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

目前我执行以下步骤:

    重命名工作副本的文件夹
    例如mv /projectA /projectA_master)

    再次克隆项目
    git clone url

    切换到devel分支
    cd projectA && git -b devel origin/devel

    查看与meld的差异
    meld /projectA_Master projectA

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



1> Jörg W Mitta..:

简短而甜蜜:

git config --global diff.tool meld

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

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

git difftool master..devel

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

git difftool -d ABC


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

2> GutenYe..:

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

配置git

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


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

3> Will Manley..:

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


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

4> Piotr Jurkie..:

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

git difftool -d branchname

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

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

git difftool -d stash

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

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


将新文件从分支复制到工作目录不起作用:(

5> Mark Longair..:

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.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有