あるレポが別のレポの前または後ろにあると言うことが何を意味するのか完全にはわかりません。それらは単なるセットであり、何の参照もなければ、順序付けもありません。ローカル リポジトリにはリモート リポジトリにはないコミットがあると言えます。しかし、枝の話をしなければ、それが進んでいるか遅れているかはわかりません。ただし、レポが最新かどうかを判断できる場合があります。
また、リモートと通信する場合、ローカル git クライアントは、ローカル ブランチ チップとリモート ブランチ チップの間にいくつのコミットがあるかわかりません。データがローカルに転送されるまで、それはわかりません。
代わりにできることは、 rungit fetch --all
であり、次のようなスクリプトを用意します (私はそれをローカルで `git-repo-status と呼びました):
#!/bin/bash
# Taken from http://stackoverflow.com/questions/620650/can-i-easily-update-all-local-git-branches-from-remote-branches-simultaneously/answer-9076361
# tweaked by me to help give status of local versus upstream branches.
main() {
REMOTES="$@";
if [ -z "$REMOTES" ]; then
REMOTES=$(git remote);
fi
REMOTES=$(echo "$REMOTES" | xargs -n1 echo)
echo "$REMOTES" | while read REMOTE; do
git remote show $REMOTE -n \
| awk '/merges with remote/{print $5" "$1}' \
| while read line; do
RB=$(echo "$line"|cut -f1 -d" ");
ARB="refs/remotes/$REMOTE/$RB";
LB=$(echo "$line"|cut -f2 -d" ");
ALB="refs/heads/$LB";
# This is in reference to the local branch.
NBEHIND=$(( $(git rev-list --count $ALB..$ARB 2>/dev/null) +0));
NAHEAD=$(( $(git rev-list --count $ARB..$ALB 2>/dev/null) +0));
if [ "$NBEHIND" -gt 0 -a "$NAHEAD" -gt 0 ]; then
echo "$LB <--> $REMOTE/$RB: -$NBEHIND +$NAHEAD";
elif [ "$NBEHIND" -gt 0 ]; then
echo "$LB <--> $REMOTE/$RB: -$NBEHIND";
elif [ "$NAHEAD" -gt 0 ]; then
echo "$LB <--> $REMOTE/$RB: +$NAHEAD";
fi
done
done
}
main $@
実行すると、次のようなものが生成されます。
:: git repo-status
master <--> upstream/master: -14
git fetch --all
あなたの問題に対する直接的な答えではないことは承知していますが、アップストリームからリビジョンを実行して取得しない限り、あなたが望むことは不可能だと思います. あなたがそれを喜んで行うなら、上記はあなたにとって役立つかもしれません。