这些有什么区别?
例如,如果我刚刚克隆了一个仓库并且有一个遥控器/原点/某个分支
git checkout somebranch
进行更改然后添加提交推送
git diff origin somebranch
正在显示更改。
git diff origin/somebranch
显示没有变化。
答案 0 :(得分:2)
完成git push
后origin/somebranch
和somebranch
指向相同的SHA,所以我不希望git diff origin/somebranch
显示任何差异,因为那是差异HEAD
,somebranch
。在提交之后和推送之前尝试查看更改。
git diff origin somebranch
显示更改的原因是git如何解释origin
。我猜它是从它取出遥控器时将其解释为origin/HEAD
,而远程HEAD是somebranch
以外的其他东西。您可以通过
git rev-parse origin
git name-rev origin
或从您的顶级目录开始,并假设您的参考不包装
cat .git/refs/remotes/origin/HEAD
答案 1 :(得分:0)
如果你看一下下面的堆栈溢出问题会很好,这个问题解释了起源大师'之间的区别。和' origin / master' 。
In Git, what is the difference between origin/master vs origin master?
此链接解释了git如何尝试解析符号链接
https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html
所以这里
git diff origin/somebranch
正在尝试将当前索引与origin / somebranch进行比较,它应该具有与您已提交更改相同的数据。 (推送到遥控器确实没有太大的区别,因为diff不会尝试从遥控器获取数据。)
另一方面
git diff origin somebranch
尝试将原点的HEAD(从第二个链接引用数字:6)与分支somebranch(数字:来自第二个链接的4)进行比较。通常一个遥控器头将指向主分支,所以在这里它可以显示主分支和你提到的分支之间的差异