通过融合查看分支的差异?
我知道我可以使用 meld .
查看 HEAD 和当前状态之间的差异。但是我如何查看分支之间的差异,例如使用 meld 的 master
和 devel
?
目前我执行以下步骤:
- 重命名工作副本的文件夹
例如mv /projectA /projectA_master
) - 再次克隆项目
git clone url
- 切换到
devel
分支cd 项目A && git -b devel origin/devel
- 查看与 meld 的差异
meld /projectA_Master projectA
是否有更简单的方法可以在 meld 中获得相同的结果?我只需要它来查看更改,而不主要用于合并。
I know that I can view the difference between HEAD and current state with meld .
. But how can I view the differences between branches, for example master
and devel
with meld?
At the moment I do the following steps:
- Rename folder of working copy
For examplemv /projectA /projectA_master
) - Clone the project again
git clone url
- Switch to
devel
branchcd projectA && git -b devel origin/devel
- View differences with meld
meld /projectA_Master projectA
Isn't there an easier way to get the same result in meld? I only need it to review the changes and not primarily for merging.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
短& sweet:
这将 Git 配置为使用
meld
作为 diff 工具。 (您不需要指定命令行参数,Git 内置了对 Meld 的支持。)然后,如果您想要图形差异而不是文本差异,只需调用 git difftool 而不是 git diff (它们都采用相同的参数)。在您的情况下:
更新:如果您不想要一次一个文件的差异,而是想要使用 meld 的“子目录”视图来显示两个分支之间的所有更改,请注意
-d
或--dir-diff
选项用于git difftool
。例如,当我在分支 XYZ 上并且我想看看它与分支 ABC 之间有什么不同时,我运行以下命令:Short & sweet:
This configures Git to use
meld
as the diff tool. (You don't need to specify the command line arguments, support formeld
is built into Git.)Then, if you want a graphical diff instead of a textual one, you simply invoke
git difftool
instead ofgit diff
(they both take the same arguments). In your case:Update: If you don't want the one-file-at-a-time diff, but instead want to use meld's "subdirectory" view with all the changes between the two branches, note the
-d
or--dir-diff
option forgit difftool
. For example, when I'm on branch XYZ and I want to see what is different between this and branch ABC, I run this:从 git v1.7.11 开始,您可以使用 git difftool --dir-diff 来执行目录比较。在没有 https://github.com/wmanley/git-meld 脚本的情况下,它可以很好地与 meld 配合使用。
配置 git
将其用于
macOS
Starting with git v1.7.11, you can use
git difftool --dir-diff
to perform a directory diff. Which works quite well with meld wihout https://github.com/wmanley/git-meld scripts.Configure git
Use it
For macOS
我还发现这个问题很烦人,所以我制作了 git meld,它允许以更舒适的方式根据工作树或暂存区域区分任意提交。您可以在 https://github.com/wmanley/git-meld 找到它。它有点像 Mark 的脚本,但适用于将任意提交、暂存区域或工作目录与其他任何目录进行比较。如果您要比较的对象之一是工作树,那么它也是读写的,这样您就不会丢失更改。
I also found this issue annoying so I've made git meld which allows a more comfortable way of diffing arbitrary commits against the working tree or the staging area. You can find it at https://github.com/wmanley/git-meld . It's a bit like Mark's script but works for comparing any arbitrary commit or the staging area or the working directory against any of the others. If one of the things you are comparing against is the working tree then that is read-write also so you don't lose your changes.
重要的是,使用 git difftool -d ,您仍然可以在 Meld 中编辑您的工作文件并保存它们。为了实现这一点,您需要将某个分支与当前工作树进行比较,例如:
Meld 将显示左右目录都位于 /tmp 中。但是,正确目录中的文件实际上是指向当前工作目录中文件的符号链接(不适用于 Windows)。因此,您可以直接在 Meld 中编辑它们,并且当您保存它们时,您的更改将保存在您的工作目录中。
然而更有趣的选择是将当前工作目录与存储目录进行比较。您只需输入以下内容即可做到这一点:
然后您可以将一些更改从 stash(左窗口)传输到当前工作副本(右窗口),而无需使用 git stash pop/apply 并避免麻烦的冲突解决可能是由该命令引起的。
我认为它可以显着提高存储的工作流程。您可以逐渐将更改从存储转移到工作副本,并一一提交它们,如果需要,还可以引入其他一些更改。
It is important to say that using
git difftool -d
you can still edit your working files in Meld and save them. In order to achieve that you need to compare some branch to your current working tree, for example:Meld will be showing that both left and right directories are located in /tmp. However, files in the right directory are actually symbolic links to your files in the current working directory (does not apply to Windows). So you can edit them right in Meld and when you save them your changes will be saved in your working dir.
Yet more interesting option is comparison of current working dir with stash. You can do that by simply typing:
Then you can transfer some changes from stash (left window) to your current working copy (right window), without using
git stash pop/apply
and avoiding bothersome conflict resolution which may be induced by this commands.I think that it can significantly boost up workflow with stashes. You can gradually transfer changes from stash to working copy and commit them one by one, introducing some another changes if you want.
尽管从其他答案看来,目前似乎没有办法直接在 git 存储库中执行此操作,但这很容易(感谢 另一个问题 :))编写一个脚本,将两个提交的树提取到临时目录并对它们运行 meld,当 meld 退出时删除两个目录:
http://gist.github.com/498628
当然,您将丢失通过合并所做的任何更改,但我认为这对于快速概述差异非常好。
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.
我认为一个简单的方法是使用 git reset --soft :
目标:使用 meld 比较branch_a和branch_b之间的差异
I think a easy way for doing this is using
git reset --soft
:Goal: compare differences between branch_a and branch_b with meld
对于 macOS 上的 Meld,请按照 维护者的建议将其添加到您的
~/.gitconfig
中macOS 应用程序的 yousseb:如果您愿意,可以省略
merge
配置。由于自动转义和/或
zsh
@GutenYe 的答案对我来说不起作用>。For Meld on macOS, add this to your
~/.gitconfig
as recommended by the maintainer of the macOS application, yousseb:You can omit the
merge
configs if you would like.@GutenYe's answer didn't work out for me due to automatic escaping and/or something with
zsh
.我更喜欢避免 git config 设置并直接获取差异信息。
如果您当前签出了 some_branch,则只能指定其他分支名称。
git difftool --tool-help 给出了支持的选项/工具的简洁概述。
I prefer avoiding the
git config
setup and go right info the diff withYou could can only specify the other branch name if you have some_branch checked out currently.
git difftool --tool-help
gives a neat overview of the options/tools supported.在 git V1.7.9 中,您可以在不使用命令行的情况下比较两个提交:
您必须在“git gui”编辑选项中配置全局:“使用合并工具:meld”。
启动gitk,选择一个提交,右键单击另一个提交> “比较此 --> 选择”。
在“补丁”下右键单击文件> “外部差异”。
meld 将启动并在右侧显示仍然选定的第一个提交。
In git V1.7.9 you can compare two commits without the commandline:
You must configure in 'git gui' edit options, global: "Use merge tool: meld".
Start gitk, select a commit, right click another commit > "diff this --> selected".
Under 'patch' right click a file > "external diff".
meld will start and display the still selected, first commit on the right side.