gpt4 book ai didi

git log --numstat 有奇怪的数据

转载 作者:行者123 更新时间:2023-12-05 03:59:15 28 4
gpt4 key购买 nike

我运行这个命令:

git log HEAD --numstat --pretty="%ae" | cat

我看到了这个:

6       4       frontend/src/Frontend.hs
aviansys@gmail.com
dan.side@gmail.com
dan.side@avian.systems

3 3 dep/rhyolite/github.json
29 14 frontend/src/Frontend.hs
aviansys@gmail.com

3 1 backend/src/Backend/RequestHandler.hs
27 18 frontend/src/Frontend.hs
dan.side@avian.systems

5 0 default.nix
7 0 dep/reflex-dom/default.nix
7 0 dep/reflex-dom/github.json
7 0 dep/reflex/default.nix
7 0 dep/reflex/github.json
dan.side@avian.systems
dan.side@avian.systems
dan.side@avian.systems

将多个电子邮件与一个提交关联到底意味着什么?这是否可能意味着该人从一个网络转移到另一个网络(比如把他们的笔记本电脑带回家,然后完成他们的提交?)我正在尝试解析提交并将它们分配给一个作者,但是将多个电子邮件附加到一个提交正在这更难?

最佳答案

正如您已经发现的那样,您在 git log 输出中包含了 merge 。默认情况下,在查看 merge 时,git log 不会将 merge 与其父项进行比较,因此也不会输出 --numstat .

跳过 merge (使用 git log --no-merges)是......好吧,但是如果你这样做,你会丢失关于 merge 期间所做的任何更改的信息。这可能是您能做的最好的事情,因为您可以从 merge 中获得的信息很棘手。

考虑如下图:

...--o--A
\
M--...
/
...--o--B

Git 会将 M 与……什么进行比较?标准的 git diff 比较两个 提交。您应该比较哪两个提交,以了解 M 中的快照?是A-vs-M,还是B-vs-M

这个问题没有唯一的正确答案。为了避免必须选择一个答案,git log 默认情况下根本不会打扰 M。但是您可以使用以下三个选项中的任何一个来告诉它无论如何应该 diff:

  • -c:产生一个组合差异
  • --cc(两个破折号,两个小写的 C):产生一个组合差异
  • -m:通过“虚拟拆分” merge 产生多个非组合差异

这两种组合差异并不完全相同,但我从未见过对它们之间差异的意图进行适当的描述。他们都首先从差异中抛出 任何 文件,其副本在 M 中的副本与其在 A 中的副本完全匹配 B。 (如果 merge 有两个以上的父级,此阶段将丢弃与任何 父级中的副本完全匹配的任何文件。)

然后,在减少文件数量后——有时减少到零!—— merge 的 diff 继续将两个(或所有)父版本与该文件的(单个)子版本进行比较提交 M。参见 the git diff documentation on combined merges了解更多。

-m 选项更有用,尤其是与 --first-parent 选项结合使用时。在这种情况下,Git 假装——仅用于 diff 目的——M 已被拆分为多个单独的副本:

...--o--A--M1--...

...--o--B--M2--...

既然 merge 已经被拆分,每个副本只有一个父副本,所以 Git 实际上可以只使用 git diff A M1 并向您展示。然后它可以继续 git diff B M2 并向您展示。每个差异中使用的实际快照只是实际提交 M 的(单个)快照。

如果将其与 --first-parent 结合使用,git log 仅遍历每个 merge 的 first 父级,并且仅生成 merge 的第一父差异。因此,这个 git log 不是实际的图表,而是向您展示了如果图表只是:

...--o--A
\
M--...

您根本看不到提交 B(也没有它的父级),但是您确实得到了描述提交 M 的差异,与提交 A,因此 --numstat 适用于这种情况。

关于git log --numstat 有奇怪的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57333971/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com