如何列出所有未推送到 git 的本地跟踪分支?
How do I list all local tracking branches not pushed in git?
我在多个跟踪分支的 git 存储库中工作,到一天结束时,我不知道我是否将我的所有工作推送到所有分支中。
是否有 git 命令显示哪些分支未被推送,以便我可以检出并进行拉取,必要时合并然后推送?
假设(或定义):通过tracking branch你的意思是一个有上游集的分支,and上游指的是一个远程跟踪名称。例如,如果分支 develop
有 origin/develop
作为它的上游,那一个算;但如果分支 test
将 develop
设置为其上游,则该分支不计算在内。
在这种情况下可能使用的命令序列是:
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
与其远程副本不同步。
请注意,如果有问题的上游未命名为 origin
,您将需要相应地更改 grep
命令。您可能还需要多个 git fetch
,或者您可能想要使用 git fetch --all
。 (您可能还想使用 git fetch --prune
或将 fetch.prune
设置为 true
,但这与此处的其他所有内容无关。)
可以编写更高级的脚本,仅打印 names,跳过同步的分支,等等。如果要这样做,请使用 git for-each-ref
枚举 refs/heads/
命名空间中的引用。这些是您的分支名称。对于每个名称,测试它是否具有上游设置,如果有,则获取其上游的哈希 ID。将其与分支的哈希 ID 进行比较。此外,检查上游是否是 local 分支(上面的 test
示例,其中上游是 develop
)或远程跟踪名称。
如果上游 是 远程跟踪名称并且本地名称和上游的哈希 ID 不同,则分支与其远程副本不同步。要获得领先 and/or 的计数,请使用:
git rev-list --count --left-right local...upstream
前面的计数将是打印的第一个数字,后面的计数将是第二个。
我在多个跟踪分支的 git 存储库中工作,到一天结束时,我不知道我是否将我的所有工作推送到所有分支中。
是否有 git 命令显示哪些分支未被推送,以便我可以检出并进行拉取,必要时合并然后推送?
假设(或定义):通过tracking branch你的意思是一个有上游集的分支,and上游指的是一个远程跟踪名称。例如,如果分支 develop
有 origin/develop
作为它的上游,那一个算;但如果分支 test
将 develop
设置为其上游,则该分支不计算在内。
在这种情况下可能使用的命令序列是:
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
与其远程副本不同步。
请注意,如果有问题的上游未命名为 origin
,您将需要相应地更改 grep
命令。您可能还需要多个 git fetch
,或者您可能想要使用 git fetch --all
。 (您可能还想使用 git fetch --prune
或将 fetch.prune
设置为 true
,但这与此处的其他所有内容无关。)
可以编写更高级的脚本,仅打印 names,跳过同步的分支,等等。如果要这样做,请使用 git for-each-ref
枚举 refs/heads/
命名空间中的引用。这些是您的分支名称。对于每个名称,测试它是否具有上游设置,如果有,则获取其上游的哈希 ID。将其与分支的哈希 ID 进行比较。此外,检查上游是否是 local 分支(上面的 test
示例,其中上游是 develop
)或远程跟踪名称。
如果上游 是 远程跟踪名称并且本地名称和上游的哈希 ID 不同,则分支与其远程副本不同步。要获得领先 and/or 的计数,请使用:
git rev-list --count --left-right local...upstream
前面的计数将是打印的第一个数字,后面的计数将是第二个。