我喜欢在一个简单的脚本中使用git status --short
来检查是否
所有回购都没有变化。
我想知道是否有尚未推送的提交。
我查看了git status
的帮助,发现无法输出此消息:
Your branch is ahead of origin/master by 1 commit
如果没有推送,没有如果一切正常。
我可以使用git status
并使用grep
忽略行,但这不是一个好方法。
答案 0 :(得分:6)
“git status”的帮助实际上显示了您可以使用的选项:
<强> -b 强>
的 - 分支强>
即使是短格式也能显示分支和跟踪信息。
--short
模式下的格式不同,但它就在那里:
$ git status --short --branch ## master...origin/heads/master [ahead 2] [...] ^^^^^^^^^
如果您不关心输出格式,git status --short --branch
在内部运行等效的git rev-list --left-right @...@^{upstream}
并解释其结果。您可以直接运行git rev-list
。当且仅当您的当前分支和远程分支不同时,它将提供输出,通过提供当前分支但不在远程分支(前面)中的提交,以及远程分支中的提交但是不是在你当前的分支(后面),以diff
- 样式格式。
前进:
$ git rev-list --left-right @...@{upstream} <baa782ec4590a91d9835c36ad33f7681e4a859d5 <8b6255249bc08e2f14d8b6f31bab83b9c48cb698
背后:
$ git rev-list --left-right @...@{upstream} >0e0140fbf6f903aa7205063eac5b8cf6e268ab3b
这两种:
$ git rev-list --left-right @...@{upstream} <a7992ac7127b37d24b00fbecf67156688285be15 >0e0140fbf6f903aa7205063eac5b8cf6e268ab3b
您可以选择使用git log
代替git rev-list
,并使用其常规格式选项(例如--oneline
)来根据您的喜好定制输出格式。
或者,如果您不关心传入的更改,则可以将--left-right @...@{upstream}
更改为仅@{upstream}..@
。
答案 1 :(得分:2)
那是因为您的本地分支机构未配置为跟踪&#34;匹配的远程分支。
这有点违反直觉(对于初学者),但背景是你可能有几个遥控器(你的&#34;起源&#34;那些东西)与你沟通,这些通信的模式可能是复杂。
您可以选择明确标记您的本地分支为&#34;跟踪&#34;单个远程分支,一旦你完成了某些Git命令就会开始提示你这两个&#34;链接&#34;分支与历史有关。
设置本地分支&#34; foo&#34;跟踪远程分支&#34; origin / foo&#34;使用
git checkout foo
git branch --set-upstream-to origin/foo
(您可以使用-u
代替--set-upstream-to
)。
还有一个较旧的(并且更难使用)--track
命令行选项:
git branch --track foo origin/foo
(请注意,在这种情况下,该命令需要明确拼写本地分支的名称。)
还有其他方法可以将分支轨道设置为远程分支:
推送:
git push -u foo origin
会推动&#34; foo&#34;来源&#34;起源&#34;并将其设置为跟踪&#34; origin / foo&#34;在同一时间。
使用快捷命令初始创建时:
git checkout origin/foo
会创建一个本地分支&#34; foo&#34;指向相同的提交&#34; origin / foo&#34;指着,并立即设置跟踪信息。
为了获得更好的效果,请在Git中熟悉remote branches的概念。