“git diff origin / somebranch”和“git diff origin somebranch”之间的区别

时间:2014-11-26 04:36:39

标签: git github

这些有什么区别?

例如,如果我刚刚克隆了一个仓库并且有一个遥控器/原点/某个分支

git checkout somebranch

进行更改然后添加提交推送

git diff origin somebranch正在显示更改。

git diff origin/somebranch显示没有变化。

2 个答案:

答案 0 :(得分:2)

完成git pushorigin/somebranchsomebranch指向相同的SHA,所以我不希望git diff origin/somebranch显示任何差异,因为那是差异HEADsomebranch。在提交之后和推送之前尝试查看更改。

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)进行比较。通常一个遥控器头将指向主分支,所以在这里它可以显示主分支和你提到的分支之间的差异