繁体   English   中英

Git 分支差异

[英]Git branch diff

我的目标是比较两个不同的 git 分支,并获取提交日志和负责它们之间每个差异的提交者的列表。 实现这一目标的最简单方法是什么?

目前我正在这样做:

git diff branch1..branch2

这会产生不同的源代码。 然后我可以手动git blame ,但这很费力。 我只想要一个负责差异的所有提交的列表(理想情况下是每个提交的日志和提交者)。

一个复杂的问题,用一个例子更容易解释:

branch1有提交A, B, C

branch2有提交D, E, F

但是,提交BE实际上是相同的提交(更改完全相同的文件——它们是精选文件),但日志消息/提交者可能不同。 我不想包含BE提交,我只想要实际引入分支之间差异的更改。

如果您想与分支进行比较并查看提交方面的差异,则最好使用git log为您服务。

有很多使用它的方法。 例如,如果您想获取在origin/master中而不是在master中的提交的列表,您可以这样做:

git log master..origin/master

这称为git revision 有许多不同的方法来比较分支,是一个很好的资源。

这为您提供了提交列表。 您可以使用所有常规修饰符来查看内容 ( -p ) 以及您可能想要的任何其他信息。

您也可以将..用于git log

对于你的情况,这应该做

git log --pretty="%h %s - %an <%ae>" branch1..branch2

这里, %h是 commit hash 的缩写, %s是主题, %an a 是作者姓名, %ae是作者 email。 有关更多选项,请参阅漂亮格式

对于提交日志列表:

正如其他人所建议的那样: git log a..b将给出“在b中但不在a中”的提交列表。
您必须同时查看git log a..bgit log b..a才能查看相关提交。

您还可以在一个命令中查看两者: git log a...b (三个点,表示“对称差异”)。

您可以添加--boundary (默认情况下,上述命令不显示分支拆分的提交,添加--boundary显示它), --graph以更好地查看谁是谁的父级,以及--oneline如果您想要对该地段的简要概述,请使用--oneline

# the --boundary and --graph are really helpful to make sense of the '...' version
git log --boundary --graph --oneline a...b

# you can use the options with any 'git log' command :
git log --graph --oneline master
git log --boundary --graph --oneline a..b

查看对称差异时, git log也有--cherry-mark-cherry-pick选项:

# will mark with '=' commits cherry picked between the two branches :
git log --boundary --graph --cherry-mark --oneline a...b

# will hide commits cherry picked between the two branches :
git log --boundary --graph --cherry-pick --oneline a...b

阅读有关cherry-* 选项的文档以获取更多详细信息。

如果您使用 git 的图形前端,您可能会以某种方式将这些选项提供给查看器。 它们中的大多数都隐含了--graph选项——即:它们画线和点来帮助您跟踪分支和合并的历史。

例如,在gitk中,您可以通过从菜单中选择“查看 > 新视图...(Shift-F4)”来执行此操作,您将看到一个对话框,其中包含多个通过复选框可用的选项,以及一个字段“Additional arguments to git 日志”。


要查看差异:

如果要查看每次提交引入的补丁,可以在上面的git log命令中添加-p

# with the following three views :
git log --graph --oneline --boundary --cherry-pick a...b
git log -p --graph --cherry b...a
git log -p --graph --cherry a...b

--cherry此处的文档)是--cherry-*变体之一

你应该能够看到你想要的所有信息(也许更多?;))

您可能必须混合 diff 和 blame 信息:

https://github.com/eantoranz/difflame

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM