我在一个git代码库的多个跟踪分支上工作,但到一天结束时,我不知道是否将所有工作都推送到了所有分支上。
有没有一个git命令可以显示哪些分支没有被推送,这样我就可以切换到该分支并执行拉取操作,必要时进行合并,然后再进行推送?
有没有一个git命令可以显示哪些分支没有被推送,这样我就可以切换到该分支并执行拉取操作,必要时进行合并,然后再进行推送?
git fetch
接着是:
git branch -vv | grep origin/
* master 083378cc35 [origin/master] commit subject line
xyz 8dbdf339cd [origin/xyz: ahead 1, behind 13] another subject line
上述内容告诉我们,master
已经是最新版本,但是xyz
与它的远程分支不同步。
请注意,如果所讨论的上游(upstream)不叫做origin
,你需要相应更改grep
命令。 你可能还需要多运行一次git fetch
,或者你可以使用git fetch --all
。 (你也可以使用git fetch --prune
或将fetch.prune
设置为true
,但这与这里的其他所有内容无关。)
可以编写一个更高级的脚本,仅打印名称,跳过已同步的分支等等。 如果您想要这样做,请使用git for-each-ref
枚举refs/heads/
命名空间中的引用。 这些是您的分支名称。 对于每个名称,测试是否有上游配置,并获取其上游的哈希ID(hash ID)。 将其与分支的哈希ID进行比较。 另外,检查上游是本地分支(例如上面的test
示例,其中上游是develop
)还是远程跟踪名称。
如果上游是远程跟踪名称,并且本地名称和上游的哈希ID不同,则该分支与其远程对应分支不同步。 要获取前进和/或后退计数,请使用:
git rev-list --count --left-right local...upstream
前面的计数器将是第一个打印的数字,后面的计数器将是第二个。
git branch -vv | grep origin/
足以查看应该推送到其远程分支副本的哪些分支。 - Phate01