【问题标题】:Get difference in lines of code between 2 commits by date Git按日期 Git 获取 2 次提交之间的代码行差异
【发布时间】:2015-10-04 03:16:12
【问题描述】:

我是 git 新手,需要有关命令的帮助。

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

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

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

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

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

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

提前致谢。

【问题讨论】:

    标签: git version-control git-branch


    【解决方案1】:

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

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

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

    您可以使用git rev-list 找到从origin/master 开始的特定日期之后之前 发生的第一次提交的SHA-1 哈希: p>

    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被应用after the filtering options

    请注意,这些是在提交排序和格式化之前应用的 选项,例如--reverse

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

    + This is a modified line
    - This is a line
    

    所以两者都算。

    【讨论】:

    • 感谢您的回答,似乎有效。但是我只想确保它只将我的提交与 2 个提交相互比较,而不计算其间的提交(就像总结添加/删除的文件一样)?还有一个更“用户友好”的上述命令版本,而不是首先必须在上面的列表中找到最接近 12 月 31 日的第一个提交,然后必须向下滚动到列表底部,然后找到第一个提交?
    • 我要求“用户友好”的原因是因为我将在几个 repos 上自动执行此操作,我不想将所有内容转储到文本文件然后找到第一个行,然后是第二行,然后运行另一个命令。谢谢
    • @anders 当然。我添加了几个命令来检索范围边缘的提交的 SHA-1 哈希值。
    • 感谢您的帮助,非常感谢 =)
    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2017-03-27
    相关资源
    最近更新 更多