按日期 Git 获取 2 次提交之间的代码行差异

Get difference in lines of code between 2 commits by date Git

我是 git 的新手,需要命令方面的帮助。

所以我在 Git 中克隆了一个存储库,我想查看最接近 2 个日期的 2 个提交之间的插入和删除差异。

我知道如何通过 2 个日期之间的提交来获取历史提交,如下所示:

$ git log --since "JAN 1 2014" --until "DEC 31 2014" --oneline --shortstat origin/master

但是我如何比较第一个最接近 2014 年 1 月 1 日和第二个最接近 2014 年 12 月 31 日的提交,并获得两个提交版本中所有文件之间的总差异?不按提交提交并添加总差异,而只是提交 1(1 月 1 日)和提交 2(12 月 31 日)的差异,并跳过这些提交之间的所有提交,例如一行

51647f3: 340 files changed, 1316 insertions(+), 6676 deletions(-)

还有一个问题,插入内容是否还包括修改后的行或只是实际的新行?

提前致谢。

您可以使用 git diff 并使用 .. 表示法提供 a range of commits

git diff <firstcommit>..<secondcommit> --shortstat

在 Git 中,提交指向存储库目录和文件的 快照 。当您比较两个提交时,您实际上是在比较文件 的 状态,因为它们在不同的时间点,无论有多少次提交(即 "snapshots")发生在之间。

您可以在之后或之前找到第一个提交的 SHA-1 哈希值,从 [=15] 开始的特定日期=] 通过使用 git rev-list:

git rev-list --since="jan 1 2014" --reverse origin/master | head -1
git rev-list --until="dec 31 2014" -n 1 origin/master

其中 head 在第一种情况下使用而不是 -n 切换到 select 仅在输出的第一行。原因是--reverse应用了after the filtering options:

Note that these are applied before commit ordering and formatting options, such as --reverse.

关于你的第二个问题,根据unified diff format,修改的行算作新行的插入(+)和删除(-)旧的:

+ This is a modified line
- This is a line

所以两者都算。