我是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(-)
另外一个问题,插入还包括修改的行还是仅包含实际的新行?
提前致谢。
答案 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
所以这两者都算得上。