如何引用git别名来对名为“origin”的远程存储库上的等效跟踪分支执行操作?例如,如果我在我的本地仓库的分支“foo”上,并且我想运行一个通常默认为我的“origin / foo”分支的命令,我该怎么办?
这是一个具体的例子:
我希望看到来自我的“origin / foo”分支的传入提交,并且我在我的本地“foo”分支上。为此,我会运行git fetch && git log --pretty=oneline --abbrev-commit ..origin/foo
。因此,我设置了git incoming
别名,如下所示:
[alias]
incoming = !git fetch && git log --pretty=oneline --abbrev-commit ..@{u}
但是,此别名被解释为git fetch && git log --pretty=oneline --abbrev-commit ..upstream/foo
,其中@{u}
可替代上游远程上的等效分支。我想执行相同的命令,但是在 origin 远程的等效分支上。我怎样才能做到这一点?我尝试了@{o}
,但这不起作用,我在git别名文档中的任何地方都找不到这种语法。我从@ {sschuberth在this answer的评论中得出了答案,但我没有找到太多的文档。
更新 我发现了一个紧密的解决方案,但它使用了bash参数而不是git别名:
incoming = !git fetch && git log --pretty=oneline --abbrev-commit ..$1
这里的缺点是我无法利用git提供的自动完成功能,它不会自动将我的本地分支与远程origin
存储库的分支进行比较。
答案 0 :(得分:2)
请注意,据我所知Git still does not properly support a "triangular" workflow,您从“上游”遥控器拉出,应用您的更改,然后推送到“原始”遥控器(这是您上游项目的分支)。 Git的维护者Junio说
Note that even in a triangular workflow, <at> {u} should still refer to
the place you integrate with, i.e. your "upstream", not to the place
you push to publish the result of your work.
每个本地分支只能有一个远程跟踪分支,它可以是upstream
中的相应分支,也可以是origin
中的相应分支。 @{u}
指向配置为远程跟踪分支的任何内容,与语义上这是您的上游项目还是分叉项目无关。令人困惑的是,Git文档将@{u}
称为“上游”的简写,但实际上它大部分时间都指向通常是“起源”。
长话短说,@{u}
工作就像您希望您需要使用{{foo
从upstream/foo
更改本地分支origin/foo
的远程跟踪分支git branch --set-upstream-to origin/foo
1}}。
编辑:如果您有冒险精神,可以尝试使用添加Felipe Contreras' fork of Git的the concept of a "publish" tracking branch。