这个答案非常适合查看被检入git的两个文件之间的视觉差异: 如何使用视觉差异程序查看“ git diff”输出?
但是,我希望看到两个分支之间的视觉差异。到目前为止,我最好的选择似乎是:
git diff --name-status master dev
这不是很有用,也不是很直观。
还有什么更好的了吗?
这个答案非常适合查看被检入git的两个文件之间的视觉差异: 如何使用视觉差异程序查看“ git diff”输出?
但是,我希望看到两个分支之间的视觉差异。到目前为止,我最好的选择似乎是:
git diff --name-status master dev
这不是很有用,也不是很直观。
还有什么更好的了吗?
Answers:
Meld
,然后将其设置为默认difftool
与git config --global diff.tool meld
最后启动它,而不是简单的diff
用git difftool branch1..branch2
。结果看起来更漂亮。
为了看到两个分支之间所有差异的视觉差异,我喜欢合并两个分支-无需提交合并-然后使用git gui
或git Extensions来获得差异的概述。
无需提交即可合并的Git命令行:
git checkout分支 git merge --no-commit --no-ff branchB
然后,完成后,您可以撤消合并
git merge --abort
(在@jcugat的评论中)
git gui
冲突显示为未上演的阶段,非冲突显示为上演的阶段,因此您甚至可以很好地区分。对我的帮助远胜于最高答案:D
您也可以使用gitk轻松做到这一点。
> gitk branch1 branch2
首先单击branch1的尖端。现在,右键单击branch2的尖端,然后选择“比较此->已选择”。
gitk branch1..branch2
仅使用显示两个修订之间的提交。
对于使用TortoiseGit的Windows用户,您可以通过此相当模糊的功能获得视觉上的比较:
shift
并右键单击它ctrl
选择两个分支比较资料来源:http : //wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/
如果您使用的是OSX或Windows 7+,则Atlassian SourceTree可以很好地实现此目的。这是免费的。
您可以在并行差异设置中看到分阶段的更改,并且可以轻松地将本地与远程分支以及任何其他两个分支进行比较。选择多个文件时,差异显示如下:
假设您已经签出了一个功能分支,并且想要查看与“ master”的差异,请右键单击“ master”分支,然后选择“与当前差异”
不幸的是,它似乎不会很快在* nix发行版中提供。
尝试“ difftool”(假设您已经安装了diff工具)-请参阅https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html
我发现名称状态适合摘要,但是difftool会迭代更改(该-d
选项为您提供目录视图),例如
$ git difftool their-branch my-branch
Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...
或正如@ rsilva4所提到的-d
,默认情况下是您当前的分支,例如-与master进行比较:
$ git difftool -d master..
...是的-有很多变化-https: //www.kernel.org/pub/software/scm/git/docs/git-reset.html
git difftool -d their-abc my-abc
-d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
如果您使用的是github,则可以使用该网站:
github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch
这将为您显示两者的比较。
github.com/url/to/your/repo/compare/
,然后您可以选择分支机构
在GitExtensions中,您可以按一下在修订网格中选择两个分支Ctrl。然后,您会看到这些分支之间存在差异的文件。当您选择一个文件时,将看到它的差异。
从这里取
更新
Mac:我现在使用SourceTree。彻底推荐。我特别喜欢上演/不上演帅哥的方式。
Linux:我在以下方面取得了成功:
meld
例如smartgit
在Ubuntu 上安装:
.deb
从https://www.syntevo.com/smartgit/download/下载这可以做到:
git-diffall使用类似于meld的GUI diff工具。请参阅此处的第5点:
http://rubyglazed.com/post/15772234418/git-ify-your-command-line
这里有一个关于git和meld的不错的帖子:http : //nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy
您也可以使用Perforce提供的免费P4Merge来做到这一点:
http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools
但以上链接的简要总结为:
$ git mergetool
,并$ git difftool
在使用p4merge$ git diff
仍将使用默认的内联差异查看器:)(已在git版本1.8.2中进行了测试)[merge]
keepBackup = false
tool = p4merge
[mergetool "p4merge"]
cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
keepTemporaries = false
trustExitCode = false
keepBackup = false
[diff]
tool = p4merge
[difftool "p4merge"]
cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""
git show-branch
核心git功能可以做很多事情。最好指定要包含在视觉差异中的内容。大多数答案都集中在提交的逐行差异上,您的示例集中在给定提交中受影响的文件名。
似乎无法解决的一个视觉问题是如何查看分支包含的提交(无论是公共的还是唯一的)。
对于这种视觉效果,我非常喜欢git show-branch
;它将每个分支的组织良好的提交表分解回共同的祖先。-要在具有多个分支且有分歧的仓库上尝试,只需键入git show-branch
并检查输出-有关示例的撰写,请参阅比较Git分支之间的提交
这是在Visual Studio(在VS 2017中测试)中如何查看整个提交与单个文件相对的视觉差异。不幸的是,它仅适用于一个分支内的提交:在“ Team Explorer”中,选择“ Branches”视图,右键单击存储库,然后选择“ View history”,如下图所示。
然后,当前分支的历史记录将显示在主区域中。(在当前分支上结束于较早提交的分支的分支由标签标记。)现在,使用Ctrl-Left选择几个提交,然后右键单击并从弹出菜单中选择“比较提交...”。
有关在Microsoft世界中比较分支的更多信息,请参见以下stackoverflow问题:使用Visual Studio的git分支之间的差异。
您还可以使用vscode使用扩展CodeLense来比较分支,这已在以下方法中得到解答:如何在Visual Studio代码上比较不同的分支