问题描述
自从我开始使用功能分支以来,我可以要求差异:
git diff upstream-branch...
但它要求我知道上游分支是什么。是否有上游分支的参考,无论它是什么,而我事先不知道或不必挖掘它?比如,我不知道:
git diff UPSTREAM...
解决方法
作为一个班轮:git diff @{u}...
一个分支的上游由两部分组成,两者都可以通过git config
进行设置和检索。 远程 部分很简单,因为给定一个名为 B
的分支,它是 branch.B.remote
。如果您使用 git config
,后半部分会困难得多。1幸运的是,由于 Git 版本 1.8 左右,@{upstream}
后缀适用于解析分支名称的所有内容:
foo@{upstream}
是分支 foo
的上游。 @{u}
是 @{upstream}
的简写,独立的意思是 HEAD@{upstream}
。
要获取上游的符号名称,如果您需要,请使用 git rev-parse --symbolic-full-name
或 git rev-parse --abbrev-ref
。请注意,如果没有为当前或给定分支设置上游,您将收到来自 git rev-parse
的错误。
1它是 branch.B.merge
,但这必须通过给定遥控器的 fetch =
映射运行才能找到正确的远程跟踪名称。也就是说,假设分支 br
有 branch.br.remote = r
和 branch.br.merge = xyz
。然后,您必须通过 refs/heads/xyz
规则运行 remote.r.fetch
以得出与远程 xyz
上的 r
相对应的远程跟踪名称。没有命令行命令可以为您执行此操作。