查看分支与融合的差异?
我知道我可以看到HEAD和当前状态之间的区别与meld .
。 但是我怎样才能查看分支之间的差异,例如master
和devel
与meld?
目前我执行以下步骤:
- 重命名工作副本的文件夹
例如mv /projectA /projectA_master
) - 再次克隆该项目
git clone url
- 切换到
devel
分支
cd projectA && git -b devel origin/devel
- 查看与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仓库中执行此操作,但很容易(感谢其他问题的答案:))编写一个脚本,该脚本将提取两个提交的树到临时目录并在其上运行融合,当融合退出时删除两个目录:
当然,你将会失去通过融合所做的任何改变,但是我想,对于差异的快速回顾是相当不错的。
我认为一个简单的方法是使用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