查找哪些本地分支与远程不同步

11
假设我有一个带有多个分支的git仓库。我怀疑某些分支没有向上游推送,或者已经过时,或者两者都是(即分叉)。
是否有一种方法可以通过一个命令查找哪些分支与远程不同步?(编写脚本可以,但我想知道是否已经有这样的脚本存在)。
4个回答

8

我已经写了一个脚本。结果发现git branch -v给出了必要的信息。

~/bin/git-total.sh:

#!/bin/sh

for DIR in "$@"; do
    # Only git dirs interesting
    [ -d "$DIR/.git" ] && cd "$DIR" || continue

    # git branch -v gives ahead/behind info
    # using perl - sorry for this
    MOD=`git branch -v | perl -wlne '/^..(\S+)\s+([a-f0-9]+)\s+(\[ahead\s+(\d+)\])/ or next; print "# Branch ahead: $1"; '`;

    # a series of UGLY HACKs to get pretty-printing
    [ ! -z "$MOD" ] && MOD="
$MOD"
    git status | grep -q '^# Changes' && MOD="$MOD
# Uncommitted changes present"

    # print summary
    [ ! -z "$MOD" ] && echo -e "$DIR:$MOD"
    cd -
done

6
这可能会对你有所帮助:git remote show origin。我不确定,但它对我很有效。

它没有显示我需要的内容,但是 git branch -v 显示了。 - Dallaylaen

1

0

为了知道远程是否已更改,您至少需要进行一次git fetch以更新远程引用。之后,git status将告诉您是否落后或领先于远程以及有多少提交。


是的,这就是我想做的,只是以一种不那么互动的方式。Git状态只显示一个分支,所以在执行之前,我将不得不遍历它们,并且可能会在此之前储存我的本地更改(如果有的话)。 - Dallaylaen
原来 git branch -v 给出了必要的信息。 - Dallaylaen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接