作为一个例子,假设您要编写一个git别名,它显示当前分支与其origin
合作伙伴之间的差异。参考当前分支和起源/ <current>在git别名
在主人的特殊情况下,它看起来如下:
[alias]
top = log --oneline --graph --decorate master ^origin/master
如何更换master
?
作为一个例子,假设您要编写一个git别名,它显示当前分支与其origin
合作伙伴之间的差异。参考当前分支和起源/ <current>在git别名
在主人的特殊情况下,它看起来如下:
[alias]
top = log --oneline --graph --decorate master ^origin/master
如何更换master
?
如果你的git版本不是很古怪,字符串@{u}
意味着“上游”,即无论当前分支正在跟踪的origin/foo。 (并且:HEAD
表示“当前分支,如果在一个分支”,并省略东西在..
语法意味着HEAD
。)因此,@{u}..
的意思是“在HEAD一切不是在其上游”:
[alias]
top = log --oneline --graph --decorate @{u}..
一种方式做到这一点:
[alias]
top = "!git log --oneline --graph --decorate `git rev-parse --abbrev-ref HEAD` ^origin/`git rev-parse --abbrev-ref HEAD`"
果然别名到一个shell命令,它给你的能力嵌套命令。
这假定如果你在分支'foo'上,上游版本是'origin/foo',考虑到问题的方式,这是合理的。但是,实际的上行链路(如果有的话)可能是'origin/bar'或者可能是'other-remote/foo'或甚至'other-remote/bar'。另外我会建议在'HEAD'分离的情况下使用'git symbolic-ref --abbrev HEAD',但这会带来如何优雅地失败的问题:-) – torek
@torek你的意思是'git symbolic-ref - 短HEAD',对吗? – erikbwork
@ erikb85:呃,是的,有'--abbrev-ref'卡在我的脑海里或什么东西;符号需求'--short'在这里.. – torek
你能链接一些文件吗?你怎么知道'@ {u}'意味着上游?还有其他的'@ {...}'选项吗? – erikbwork
是的,要查看的地方在['git-rev-parse']的文档中(https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html)和['git-rev-list'](https://www.kernel.org/pub/software/scm/git/docs/git-rev-list.html)。有很多时髦的语法选项,例如,我总是使用'rev ^',而很少使用'rev^{commit}',并且仍尝试着更多地使用'branch @ {n}'。 – torek
+1:你先生是某种巫师...... –