[英]Git branch diff
我的目标是比较两个不同的 git 分支,并获取提交日志和负责它们之间每个差异的提交者的列表。 实现这一目标的最简单方法是什么?
目前我正在这样做:
git diff branch1..branch2
这会产生不同的源代码。 然后我可以手动git blame
,但这很费力。 我只想要一个负责差异的所有提交的列表(理想情况下是每个提交的日志和提交者)。
一个复杂的问题,用一个例子更容易解释:
branch1
有提交A, B, C
branch2
有提交D, E, F
但是,提交B
和E
实际上是相同的提交(更改完全相同的文件——它们是精选文件),但日志消息/提交者可能不同。 我不想包含B
和E
提交,我只想要实际引入分支之间差异的更改。
如果您想与分支进行比较并查看提交方面的差异,则最好使用git log
为您服务。
有很多使用它的方法。 例如,如果您想获取在origin/master
中而不是在master
中的提交的列表,您可以这样做:
git log master..origin/master
这称为git revision
。 有许多不同的方法来比较分支,这是一个很好的资源。
这为您提供了提交列表。 您可以使用所有常规修饰符来查看内容 ( -p
) 以及您可能想要的任何其他信息。
对于提交日志列表:
正如其他人所建议的那样: git log a..b
将给出“在b
中但不在a
中”的提交列表。
您必须同时查看git log a..b
和git 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 信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.