git diff 中提交参数的顺序

Order of commit arguments in git diff

git命令

的顺序是什么
git diff [--options] <commit> <commit> [--] [<path>…]

比较不同的提交?看来如果我想比较新旧我需要做的事情

git diff [--options] <New_commit> <Old_commit> 以便查看当前差异?

我经常git diff [--options] <Old_commit> <New_commit>

但这似乎是错误的?

当我这样做时

$ git diff `git rev-list --since="jun 30 2014" --reverse origin/master | head -1` `git rev-list --until="dec 31 2014" origin/master | head -1` --shortstat 

1072 files changed, 389650 insertions(+), 39180 deletions(-)

但是当我这样做时

$ git diff --stat `git rev-list --until="dec 31 2014" origin/master | head -1`

我得到的打印输出是:

384 files changed, 61255 insertions(+), 20526 deletions(-)

这不接近 300000。所以我的问题是我是否应该先插入新提交和旧提交 sedond,例如:

 $ git diff `git rev-list --until="dec 31 2014" origin/master | head -1`..`git rev-list --since="jun 30 2014" --reverse origin/master | head -1` 

我找不到任何关于我应该以何种顺序插入提交以查看新旧提交之间差异的文档。也许你能帮我澄清一下?

提前致谢。

编辑: 我问的原因是我想

  1. 知道在给定旧提交的情况下新提交中添加了多少行新代码,并且

  2. 我想计算新提交的代码行数

TL;DR

在下面的git-diff语法中,

git diff [--options] <commit> <commit> [--] [<path>...]
  • 第一个 <commit> 对应于基本提交,
  • 第二个 <commit> 对应于要与基本提交进行比较的提交。

使用受数学启发的符号,

git diff <x> <x+∆x>

会告诉你区别 ∆x,而

git diff <x+∆x> <x>

会告诉你区别 -∆x

请注意,因为这两个提交不需要以任何方式排序,无论是按时间顺序还是拓扑,将它们称为 "old" 和 "new"(就像你所做的那样)有点误导。

更多详情

只需查找 git-diff man page,您就可以学到很多东西。在 描述 部分下,您会找到

git diff [--options] <commit> <commit> [--] [<path>...]

This is to view the changes between two arbitrary <commit>.

当然,这并没有告诉您哪个提交是哪个,但是,进一步往下,在 Examples 部分下,您会发现几个有启发性的示例:

git diff HEAD^ HEAD

[...] Compare the version before the last commit and the last commit.

git diff topic...master

[...]

Changes that occurred on the master branch since when the topic branch was started off it.

git diff commit_source commit_destination

git diff 将显示的是

  • 如果您将 commit_source 合并到 commit_destination
  • 中,commit_source 会带来的变化列表

这与 :

不同
  • commit_sourcecommit_destination
  • 之间的所有差异