我正在多个跟踪分支的 git 存储库中工作,到一天结束时,我不知道是否将所有工作推送到所有分支中。
是否有一个 git 命令显示哪些分支未推送,以便我可以签出并进行拉取,必要时合并,然后推送?
假设(或定义):通过跟踪分支,您指的是具有上游集的分支,并且该上游指的是远程跟踪名称。例如,如果分支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,但这与此处的其他所有内容无关。)
可以编写一个更奇特的脚本,仅打印名称,跳过同步的分支,等等。如果您想这样做,请使用枚举命名空间git for-each-ref中的引用refs/heads/。这些是您的分支机构名称。对于每个名称,测试它是否有上游设置,如果有,则获取其上游的哈希 ID。将其与分支的哈希 ID 进行比较。另外,检查上游是否是本地分支(test上面的示例,其中上游是develop)还是远程跟踪名称。
如果上游是远程跟踪名称,并且本地名称和上游的哈希 ID 不同,则该分支与其远程对应分支不同步。要获取领先和/或落后计数,请使用:
git rev-list --count --left-right local...upstream
前面的计数将是第一个打印的数字,后面的计数将是第二个。
| 归档时间: | 
 | 
| 查看次数: | 2962 次 | 
| 最近记录: |