Remarque: Même si j'ai posté ma propre solution, je vous conseille d'utiliser git-up, qui est également accepté de répondre.
Je sais que cette question est de presque 3 ans, mais je me suis posé la même question et n'a pas trouvé tout prêt de solution toute faite. Donc, j'ai créé une coutume commande git script shell de mon auto.
Ici ça va, l' git-ffwd-update
script effectue les tâches suivantes...
- il émet un
git remote update
d'extraire le lates tours
- puis utilise
git remote show
pour obtenir une liste des succursales locales de la piste une branche distante (par exemple les agences qui peuvent être utilisés avec git pull
)
- elle vérifie ensuite avec
git rev-list --count <REMOTE_BRANCH>..<LOCAL_BRANCH>
combien d'engager la succursale locale est derrière la télécommande (à l'avance et vice versa)
- si la branche locale est de 1 ou plus s'engage à l'avance, il peut ne PAS être en avance rapide et doit être fusionnées ou relocalisée à la main
- si la branche locale est 0 s'engage à l'avance et 1 ou plus s'engage derrière, il peut être rapidement acheminés par
git branch -l -f <LOCAL_BRANCH> -t <REMOTE_BRANCH>
le script peut être appelé comme:
$ git ffwd-update
Fetching origin
branch bigcouch was 10 commit(s) behind of origin/bigcouch. reseting local branch to remote
branch develop was 3 commit(s) behind of origin/develop. reseting local branch to remote
branch master is 6 commit(s) behind and 1 commit(s) ahead of origin/master. could not be fast-forwarded
Le script complet, doit être enregistré en tant que git-ffwd-update
et doit être sur le qui - PATH
.
#!/bin/bash
main() {
REMOTES="$@";
if [ -z "$REMOTES" ]; then
REMOTES=$(git remote);
fi
REMOTES=$(echo "$REMOTES" | xargs -n1 echo)
CLB=$(git branch -l|awk '/^\*/{print $2}');
echo "$REMOTES" | while read REMOTE; do
git remote update $REMOTE
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";
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 ]; then
if [ "$NAHEAD" -gt 0 ]; then
echo " branch $LB is $NBEHIND commit(s) behind and $NAHEAD commit(s) ahead of $REMOTE/$RB. could not be fast-forwarded";
elif [ "$LB" = "$CLB" ]; then
echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. fast-forward merge";
git merge -q $ARB;
else
echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. reseting local branch to remote";
git branch -l -f $LB -t $ARB >/dev/null;
fi
fi
done
done
}
main $@