git log A..B (deux points)
Bien que cette syntaxe ressemble à une "plage" de commits de A à B, elle est
en fait un coup de main pour git log ^A B
:
- affiche tous les commits accessibles depuis B; B lui-même est inclus
- excluant ceux accessibles depuis A; A lui-même est exclu
Donc, étant donné l’historique suivant (avec les plus anciens commits à gauche,
le plus récent à droite):
*--*--*--A--*--*--*--B
git log A..B
montrera tous les commits à la droite de A.
Notez que git log A..
est équivalent à git log A..HEAD
.
journal git A ... B (trois points)
La page de manuel git-rev-list décrit ceci comme une notation spéciale pour
"différence symétrique".
C'est équivalent à git log A B --not $(git merge-base --all A B)
.
En clair, cela signifie "tous les commits qui sont accessibles depuis
soit A ou B mais pas des deux.
Double point
La spécification de plage la plus courante est la syntaxe à double point. Ce
demande fondamentalement à Git de résoudre une série de commits atteignables
d’un commit mais ne sont pas accessibles depuis un autre. Par exemple, disons
vous avez une histoire de commit qui ressemble à:
Vous voulez voir ce qui est dans votre branche de test qui n’a pas encore été
fusionné dans votre branche principale. Vous pouvez demander à Git de vous montrer un journal de
juste ceux qui s’engage avec maître..expérience - cela signifie «tout s’engage
accessible par une expérience qui n’est pas accessible par le maître. "
de concision et de clarté dans ces exemples, j’utiliserai les lettres du
valider des objets du diagramme à la place de la sortie de journal réelle dans
l'ordre dans lequel ils seraient affichés:
$ git log master..experiment
D
C
Si, au contraire, vous voulez voir le contraire - tout s’engage en
ne maitrisez pas cette expérience - vous pouvez inverser les noms des branches.
experience..master vous montre tout en master inaccessible depuis
expérience:
$ git log experiment..master
F
E
Ceci est utile si vous voulez garder la branche de test à jour
et prévisualisez ce que vous allez fusionner. Une autre utilisation très fréquente
Cette syntaxe consiste à voir ce que vous êtes sur le point de transmettre à une télécommande:
$ git log origin/master..HEAD
Cette commande vous montre les commits de votre branche actuelle qui ne sont pas
dans la branche principale de votre télécommande d’origine. Si vous exécutez un push git et
votre branche actuelle suit l'origine / le maître, les commits répertoriés par
git log origin / master..HEAD sont les commits qui seront transférés
au serveur. Vous pouvez également laisser un côté de la syntaxe pour avoir
Git assume la tête. Par exemple, vous pouvez obtenir les mêmes résultats que dans le
exemple précédent en tapant git log origin / master .. - Git substituts
HEAD si un côté est manquant.
Points multiples
La syntaxe à double point est utile en abrégé; mais peut-être que vous voulez
pour spécifier plus de deux branches pour indiquer votre révision, telles que
voir quels sont les commits dans l’une des nombreuses branches qui ne sont pas
branche sur laquelle vous êtes actuellement. Git vous permet de le faire en utilisant soit
le caractère ^ ou --pas avant toute référence à partir de laquelle vous ne
veulent voir les commits accessibles. Ainsi, ces trois commandes sont
équivalent:
$ git log refA..refB
$ git log ^refA refB
$ git log refB --not refA
C’est bien, car avec cette syntaxe, vous pouvez spécifier plus de deux
références dans votre requête, ce que vous ne pouvez pas faire avec le double point
syntaxe. Par exemple, si vous voulez voir tous les commits qui sont
accessible depuis refA ou refB mais pas depuis refC, vous pouvez taper l’un des
celles-ci:
$ git log refA refB ^refC
$ git log refA refB --not refC
Cela en fait un système de requête de révision très puissant qui devrait aider
vous déterminez ce qu'il y a dans vos branches.
Triple point
La dernière grande syntaxe de sélection de plage est la syntaxe à trois points, qui
spécifie tous les commits accessibles par l'un des deux
références mais pas par les deux. Revenons à l'exemple de commit
histoire en:
Si vous voulez voir ce qui est en master ou expérimenter mais pas en commun
références, vous pouvez exécuter
$ git log master...experiment
F
E
D
C
Encore une fois, cela vous donne une sortie normale du journal mais ne vous montre que le commit
informations pour ces quatre commits, apparaissant dans le traditionnel
commettre la commande de date.
Un commutateur commun à utiliser avec la commande log dans ce cas est
--left-right, qui indique le côté de la plage dans lequel se trouve chaque validation. Cela rend les données plus utiles:
$ git log --left-right master...experiment
< F
< E
> D
> C
Avec ces outils, vous pouvez beaucoup plus facilement laisser savoir à Git le ou les commits que vous souhaitez inspecter.