git log
有一些非常有用的提交限制选项,例如--no-merges
和--first-parent
。我希望在生成一系列提交的累积差异补丁/统计信息/数量统计时能够使用这些选项。
使用以下命令:
git log --oneline --first-parent --no-merges --patch 29665b0..0b76a27
git log --oneline --first-parent --no-merges --stat 29665b0..0b76a27
git log --oneline --first-parent --no-merges --numstat 29665b0..0b76a27
差异不是累积的(更改针对每个提交单独列出)。
使用以下命令:
git diff --patch 29665b0..0b76a27
git diff --stat 29665b0..0b76a27
git diff --numstat 29665b0..0b76a27
这个差异是累积的,但不幸的是git diff
不支持限制提交选项。
所以我想要的是git diff
的累积差异功能和git log
的提交限制功能相结合。
我有一个想法是使用git log
生成一系列提交哈希值,然后将该列表传输到git diff
中,以生成指定提交的累积差异。类似于以下内容(显然,将哈希传输到git diff
的方法实际上是行不通的):
git log --pretty=format:%h --first-parent --no-merges 29665b0..0b76a27 | git diff
其中--pretty=format:%h
会输出匹配提交的哈希值。
更新
感谢@torek和@twalberg,我现在更清楚地理解了git diff
的操作。范围语法29665b0..0b76a27
确实是误导性的,我现在明白它实际上并没有对一系列提交进行累积差异比较。通过查看文档,我找到了这个:
"diff"是关于比较两个终点,而不是范围,而范围符号(
<commit>..<commit>
和<commit>...<commit>
)并不意味着范围,如在gitrevisions(7)中定义的“指定范围”部分。
考虑到这一点,我将重新表述我的问题。使用以下命令:
git log --oneline --first-parent --no-merges --patch 29665b0..0b76a27
git log --oneline --first-parent --no-merges --stat 29665b0..0b76a27
git log --oneline --first-parent --no-merges --numstat 29665b0..0b76a27
每个匹配的提交都列出了单独的更改。如何将这些单独的更改组合起来,以生成累积补丁/状态/ numstat?
链接可能的重复问题的答案很有帮助,建议解决方案:创建一个临时分支,挑选相关提交,然后生成差异。
我刚刚发布了一个使用此技术的答案,但我仍然想知道是否有不需要临时分支的解决方案?