我们的本地git存储库有两个遥控器。一个遥控器称为dev
,另一个称为origin
。当我们运行git status
或git status dev
时,我们会收到以下消息:
# On branch 1.8.x
# Your branch is ahead of 'origin/1.8.x' by 4 commits.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
该消息告诉我们origin
遥控器的状态。那不是我们想要的。我们如何仅检查dev
遥控器的状态?
答案 0 :(得分:4)
以下是 git status
如何获取该信息。
我们在哪个分支?
$ git symbolic-ref --short HEAD
1.8.x
(以上是查找的首选方法,一般情况下;如果您处于“分离的HEAD”模式,则会出错;或者:
$ git rev-parse --symbolic-full-name HEAD
refs/heads/1.8.x
(这也有效,但只能为您提供“全名”:删除refs/heads/
以获取分支名称。)
什么分支是1.8.x的“上游”?
$ git rev-parse --symbolic-full-name '@{upstream}'
refs/remotes/origin/1.8.x
(以上是更简单的方法,但再次只提供“全名”表单;这次你必须删除refs/remotes/
以缩短它),或者:
$ git config --get branch.1.8.x.remote
origin
$ git config --get branch.1.8.x.merge
refs/heads/1.8.x
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
(这就是git如何计算出@{upstream}
的符号全名 - 它有点复杂,因为你必须应用fetch
行 1 <的分支名称映射/ sup>这里)。
一方或另一方有多少次修改?
$ git rev-list --count origin/1.8.x..1.8.x
4
$ git rev-list --count 1.8.x..origin/1.8.x
0
也就是说,我们要求git rev-list
计算从引用1.8.x
(您当前的分支)可以访问的提交数量,而不是origin/1.8.x
(您的上游)。答案是4,所以你“领先4”。然后,我们要求git rev-list
计算从origin/1.8.x
而不是1.8.x
可以访问的提交数量。答案是0,所以你“落后于0”,git status
可以安静下来。
git status
命令可以完成所有这些工作,无论哪个分支设置为当前分支的“上游”。因此,您可以使用git branch --set-upstream-to
更改上游 - 在这种情况下,将其从origin/1.8.x
更改为dev/1.8.x
- 从那时起,您将获得该信息,{em>仅来自git status
的信息。 (将其更改回来以获取要切换回的信息。)
如果你想暂时获取它而不切换分支,你需要做更多或更少的“git status
做什么”,但是使用另一种“上游”,在这种情况下,dev/1.8.x
。编写执行此操作的shell脚本并不困难,特别是如果您只是假设分支 B
映射到分支 rmt/B
远程 rmt
(那么你不需要做所有复杂的映射)。也就是说,如果您在分支机构zog
上,并且您询问远程bob
,则只需为rev-list
和{{1}执行两个bob/zog..zog
}。
1 实际上,如果有多个ref-mapping zog..bob/zog
行,你真的想要git config --get-all remote.origin.fetch
。但是这种反映映射很痛苦;可能应该有一个git plumbing命令为你做。
答案 1 :(得分:3)
您可以使用&#34; git log&#34;,如果有的话,它会提前列出提交。
git log dev/1.8.x..HEAD
或
git log dev/1.8.x..1.8.x
如果您想了解更多简短信息,可以尝试:
git log --graph --pretty=oneline dev/1.8.x..HEAD