web-dev-qa-db-fra.com

git devant/derrière les informations entre le maître et la branche?

J'ai créé une branche à tester dans mon référentiel local (test-branch) que j'ai poussée à Github.

Si je vais sur mon compte Github et que je sélectionne ce test-branch, cela affiche l'info:

This branch is 1 commit ahead and 2 commits behind master

Mes questions sont:

  1. Comment puis-je afficher cette information localement (c'est-à-dire: une commande qui montre cela sur le terminal, plutôt que d'avoir à ouvrir Github pour la voir)?
  2. Je sais que je peux voir les différences entre les branches en utilisant:

    git diff master..test-branch
    

    ou en utilisant Meld (que je préfère):

    git difftool master..test-branch
    

    mais je me demandais s’il y avait un moyen de voir les devant et derrière s’engage séparément. I.E .: existe-t-il un moyen de montrer que 1 engagement avant par lui-même et ensuite ceux 2 commettant derrière par eux-mêmes?

135
Gabriel

Voici une astuce que j'ai trouvée pour comparer deux branches et montrer combien de commits chaque branche est en avance sur l'autre (une réponse plus générale à votre question 1):

Pour local branches: git rev-list --left-right --count master...test-branch

Pour remote branches: git rev-list --left-right --count Origin/master...Origin/test-branch

Cela donne une sortie comme suit:

1 7

Cette sortie signifie: "Comparé à master, test-branch a 7 commits de retard et 1 commet de retard."

Vous pouvez également comparer des branches locales avec des branches distantes, par exemple. Origin/master...master pour savoir combien de commits la branche master locale est en avance/derrière son homologue distante.

211
user1834095

Tout d’abord, pour connaître le nombre de révisions effectuées localement, vous devez créer un git fetch pour vous assurer que vous disposez des informations les plus récentes provenant de votre télécommande.

La sortie par défaut de git status vous indique le nombre de révisions que vous êtes en avance ou en retard, mais d'habitude je trouve cela trop prolixe:

$ git status
# On branch master
# Your branch and 'Origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)

Je préfère git status -sb:

$ git status -sb
## master...Origin/master [ahead 2, behind 1]

En fait, je l’appelle tout simplement pour git s, et c’est la commande principale que j’utilise pour vérifier le statut.

Pour voir le diff dans les "révisions ultérieures" de master, je peux exclure les "modifications ultérieures" de Origin/master:

git diff master..Origin/master^

Pour voir le diff dans les "derrière les révisions" de Origin/master, je peux exclure les "révisions à venir" de master:

git diff Origin/master..master^^

S'il y a 5 révisions avant ou après, il pourrait être plus facile d'écrire comme ceci:

git diff master..Origin/master~5
git diff Origin/master..master~5

METTRE À JOUR

Pour voir les révisions avant/arrière, la branche doit être configurée pour suivre une autre branche. Pour moi, il s’agit du comportement par défaut lorsque je clone un référentiel distant et après que je pousse une branche avec git Push -u remotename branchname. Ma version est la 1.8.4.3, mais ça marche comme ça depuis aussi longtemps que je me souvienne.

À partir de la version 1.8, vous pouvez définir la branche de suivi comme suit:

git branch --track test-branch

A partir de la version 1.7, la syntaxe était différente:

git branch --set-upstream test-branch
29
janos

Avec Git 2.5+, vous avez maintenant une autre option pour voir en avance/en retard pour toutes les branches configurées pour Push à une branche.

git for-each-ref --format="%(Push:track)" refs/heads

Voir plus à " Affichage de Git Commits Unpushed "

8
VonC

Après avoir effectué une extraction git, vous pouvez exécuter le statut git pour afficher le nombre de commits de la branche locale devant ou derrière la version distante de la branche.

Cela ne vous indiquera pas combien de commits sont devant ou derrière une branche différente. Vos options sont la diff complète, en regardant github, ou en utilisant une solution comme Vimhsa liée ci-dessus: Statut Git sur tous les repo

1
Wade Williams