git状态--简短:缺少“您的分支比'origin/master'提前1次提交”
我喜欢在一个简单的脚本中使用git status-short来检查 所有回购协议不变 我想知道是否有尚未推送的提交 我检查了git status的帮助,发现无法输出此消息:git状态--简短:缺少“您的分支比'origin/master'提前1次提交”,git,Git,我喜欢在一个简单的脚本中使用git status-short来检查 所有回购协议不变 我想知道是否有尚未推送的提交 我检查了git status的帮助,发现无法输出此消息: Your branch is ahead of origin/master by 1 commit 如果事情没有进展,如果一切正常,什么都没有 我可以使用git status并通过grep忽略行,但这不是一个好的解决方案 目标: 如果未进行任何更改且未缺少推送,则不输出任何内容 如果存在更改且缺少推送,则简要输出 git
Your branch is ahead of origin/master by 1 commit
如果事情没有进展,如果一切正常,什么都没有
我可以使用git status并通过grep忽略行,但这不是一个好的解决方案
目标:
如果未进行任何更改且未缺少推送,则不输出任何内容
如果存在更改且缺少推送,则简要输出
git status的帮助实际上显示了您可以使用的选项: -b -分支机构 显示分支和跟踪信息,即使是简短格式 在-short模式下格式不同,但它存在: $ git status --short --branch ## master...origin/heads/master [ahead 2] [...] ^^^^^^^^^ 背后: $ git rev-list --left-right @...@{upstream} >0e0140fbf6f903aa7205063eac5b8cf6e268ab3b 两者: 您可以选择使用git log而不是git rev list,并使用它的常规格式选项(如-oneline)根据您的喜好定制输出格式
或者您可以将-left-right@…@{upstream}更改为just@{upstream}.@如果您不关心传入的更改,只关心未推送的更改。这是因为您的本地分支未配置为跟踪匹配的远程分支 对于新手来说,这有点违反直觉,但背景是你可能有几个遥控器,比如你与之通信的源设备,这些通信模式可能很复杂 您可以选择显式地将本地分支标记为跟踪单个远程分支,一旦完成,某些Git命令将开始提示您这两个链接分支的历史关系 要设置本地分支foo跟踪远程分支原点/foo,请使用
git checkout foo
git branch --set-upstream-to origin/foo
您可以使用-u而不是-set-upstream
还有一个更老、更难使用的-track命令行选项:
git branch --track foo origin/foo
请注意,在这种情况下,该命令要求显式拼写本地分支的名称
有其他方法可以将分支轨迹设置为远程分支:
推送:
git push -u foo origin
将foo推送到origin,同时将其设置为跟踪origin/foo
使用快捷方式命令进行初始创建时:
git checkout origin/foo
将创建一个本地分支foo,指向相同的commit origin/foo,并立即设置跟踪信息
为了获得更好的结果,请熟悉Git中的概念。@Damodaran yes Git log origin/master..HEAD适用于问题中未被推送的提交人部分。结尾的三点是误导性的;因为他要求简短的输出。我测试了这个,只得到了你指定的线路。在显示[…]的地方还可以显示什么?@ChrisMaes未提交更改的文件名将显示在那里,即使在-short模式下也是如此。是的,这会显示[ahead 2],但不幸的是,即使所有内容都没有更改,它也会输出master。这个问题有一个限制,即如果没有更改,就不会有输出发生。@guettli那么我认为git status无法做到这一点。对答案进行编辑以提供备选答案。注意:您可能希望将其与git status-short结合使用,而不使用-branch,以获取有关未提交更改的信息。@hvd ok。我可以给git打两次电话,没问题。非常感谢。
git push -u foo origin
git checkout origin/foo