git 命令中的点总是让人有疑惑,在不同的地方有不同的意思,那git diff 中的点代表什么,有的不加点,有的两个点,有的三个点

我首先要明确git log 和 git rev-list 一样都是表示的一个范围, git diff 的参数不是标识范围,就是标识两个commit 之间的差异,跟范围没有关系

这里有两个commit foo 和 bar ,也可以是两个分支,如果是分支意味着要比较分支的head

  • git diff foo bar:  比较 foo 和 bar两个commit点的差别
  • git log foo..bar  等同于上面不加点  :比较 foo 和 bar两个commit点的差别
  • git log foo...bar  等同于 git diff $(git merge-base foo bar) bar比较的foo和bar merge base那个点(最近的共同的parent)和 bar

还是上图说明更容易理解


和 git log  相比,git diff 是两个commit点的比较,不涉及范围,没有点和两个点代表直接比较,三个点代表从merge点开始比较

在gitlab web页面上的diff 就是用的三个点的方式

参考文章:git log 的范围, 两个点和三个点的区别