Quelles sont les différences entre les commandes suivantes?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
Le manuel diff en parle:
Comparer les branches
$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- Changements entre les astuces du sujet et les branches principales.
- Comme ci-dessus.
- Modifications survenues sur la branche principale depuis le démarrage de la branche thématique.
mais n'est pas totalement clair pour moi.
..
et...
dansgit diff
et leurs différentes significations dansgit log
.Réponses:
Puisque j'avais déjà créé ces images, j'ai pensé qu'il pourrait être utile de les utiliser dans une autre réponse, bien que la description de la différence entre
..
(point-point) et...
(point-point-point) soit essentiellement la même que dans la réponse de manojlds .La commande
git diff
ne vous montre généralement que la différence entre les états de l'arborescence entre exactement deux points dans le graphe de validation. Les notations..
et...
dansgit diff
ont les significations suivantes:En d'autres termes,
git diff foo..bar
est exactement le même quegit diff foo bar
; les deux vous montreront la différence entre les pointes des deux branchesfoo
etbar
. D'autre part,git diff foo...bar
vous montrera la différence entre la "base de fusion" des deux branches et la pointe debar
. La "base de fusion" est généralement le dernier commit en commun entre ces deux branches, donc cette commande vous montrera les changements que votre travailbar
a introduits, tout en ignorant tout ce qui a été faitfoo
entre-temps.C'est tout ce que vous devez savoir sur les notations
..
et...
dansgit diff
. Toutefois...... une source courante de confusion ici est cela
..
et...
signifie des choses subtilement différentes lorsqu'elles sont utilisées dans une commande comme cellegit log
qui attend un ensemble de validations comme un ou plusieurs arguments. (Ces commandes finissent toutes par être utiliséesgit rev-list
pour analyser une liste de commits à partir de leurs arguments.)La signification de
..
et...
pourgit log
peut être représentée graphiquement comme ci-dessous:Donc,
git rev-list foo..bar
vous montre tout sur la branchebar
qui n'est pas également sur la branchefoo
. D'autre part,git rev-list foo...bar
vous montre tous les commits qui sont dans l'unfoo
ou l' autrebar
, mais pas les deux . Le troisième diagramme montre simplement que si vous listez les deux branches, vous obtenez les validations qui se trouvent dans l'une ou les deux.Eh bien, je trouve que tout est un peu déroutant, de toute façon, et je pense que les diagrammes de graphe de validation aident :)
¹ Je dis seulement "typiquement" car lors de la résolution des conflits de fusion, par exemple,
git diff
vous montrera une fusion à trois.la source
git diff
diagrammes que je ferai plus tard...
et se...
sentent renversées dansgit diff
( par rapport àgit rev-list
)!git diff foo..bar
c'est exactement le même quegit diff foo bar
; les deux vous montreront la différence entre les extrémités des deux branches foo et bar." Qu'entendez-vous exactement par «différence entre les pointes des deux branches»?Ma version consolidée du .. vs ... avec diff vs log
la source
..
/...
stuff. Par exemple,log A...B
il n'est pas clair si la commande renvoie l'intersection (partie blanche du diagramme) ou le reste de l'union AB (vert). Ce serait plus pertinent sans opérandes définis et avec une seule couleur.diff A..B
<—>log A...B
, c'est-à-dire que diffère- t-il vraiment avec 2 points, correspond-il à log avec 3 (!) Points? Ou y a-t-il une faute de frappe dans l'image. En regardant comment les points sont codés par couleur, il me semble qu'il y a une faute de frappe dans l'image. Le coin inférieur gauche:log A...B
devrait êtrelog A..B
, à droite (?). Et le journal juste à droite ne devrait...
pas l' être..
.git diff foo master
Différence entre les commits supérieurs (head) de foo et master.git diff foo..master
Une autre façon de faire la même chose.git diff foo...master
Diffère de l'ancêtre commun (git merge-base foo master
) de foo et master à la pointe de master. En d'autres termes, affiche uniquement les changements que la branche master a introduits depuis son ancêtre commun avec foo.Cet exemple de GitHub explique quand utiliser les deux:
la source
montrera les différences entre le sujet et la branche principale à ce moment-là
cela montrera également les différences entre le sujet et la branche principale à ce moment-là
cela montrera toutes les différences entre le moment où le sujet a été créé à partir de la branche et après
donc les 2 premières commandes sont les mêmes et la dernière montre juste une vue plus large dans l'historique des différences
la source
L'image du haut est équivalente à l'arborescence du graphique du bas
Une image vaut mille mots, la différence
..
...
^
est indiquée ci-dessous.la source