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:
Github
pour la voir)?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?
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.
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
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 "
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