获取两个日期之间Git提交的代码行数差异

4

我是新手,需要帮助使用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(-)

另外一个问题,插入操作是否包括修改过的行或仅限于新的行?
提前感谢。
1个回答

4
你可以使用git diff并使用..符号提供一系列提交进行比较:
git diff <firstcommit>..<secondcommit> --shortstat

在Git中,提交指向存储库目录和文件的快照。当您比较两个提交时,实际上是在比较不同时刻文件的状态,而不管在此期间发生了多少次提交(即“快照”)。
您可以使用git rev-list查找特定日期之后或之前第一个提交的SHA-1哈希值,从origin/master开始。
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开关来仅选择输出的第一行。原因是--reverse应用于过滤选项之后

请注意,在提交排序和格式设置选项(例如--reverse)之前应用这些选项。

至于第二个问题,根据统一的差异格式,修改的行计为新行的插入(+),旧行的删除(-):

+ This is a modified line
- This is a line

所以它将计算两个。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - anders
我之所以要求“用户友好”是因为我将在多个存储库上自动化此过程,我不想将所有内容都转储到文本文件中,然后找到第一行,接着找到第二行,最后再运行另一个命令。谢谢。 - anders
@anders 当然。我已经添加了几个命令来检索范围边缘提交的SHA-1哈希值。 - Enrico Campidoglio
感谢您的帮助,非常感激 =) - anders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接