按日期Git在2次提交之间获取代码行

时间:2015-07-15 07:43:50

标签: git version-control git-branch

我是git的新手,需要一个命令的帮助。

所以我在Git中克隆了一个存储库,我希望看到最接近2个日期的2个提交之间插入和删除的区别。

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

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

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

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

另外一个问题,插入还包括修改的行还是仅包含实际的新行?

提前致谢。

1 个答案:

答案 0 :(得分:3)

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

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

在Git中,提交指向存储库的目录和文件的 snapshot 。当您比较两个提交时,您实际上正在比较文件的状态,因为它们处于不同的时间点,无论提交了多少次(即#34;快照&#34;)发生在两者之间。

您可以使用{{3}找到从origin/master开始的 之前之后发生的第一次提交的SHA-1哈希值}:

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已应用git rev-list

  

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

关于您的第二个问题,根据after the filtering options,修改后的行计为新行的插入(+)和旧行的删除(-)之一:

+ This is a modified line
- This is a line

所以这两者都算得上。