Quelles sont les différences entre le double-point ".."et trois points "..." dans Git diff commettre des plages?
Quelles sont les différences entre les commandes suivantes?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
La diff manuel en parle:
la Comparaison des branches
$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- Changements entre les conseils du sujet, et le maître de branches.
- comme ci-dessus.
- changements qui se sont produits sur la branche principale depuis que le sujet branche a été commencé.
mais n'est pas totalement clair pour moi.
4 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) est essentiellement la même que dans réponse de manojlds .
la commande git diff
typically1 montre seulement la différence entre les états de l'arbre entre exactement deux points dans la propagation graphique. Les notations ..
et ...
de git diff
ont la signification suivante:
en d'autres termes, git diff foo..bar
est exactement le même que git diff foo bar
; les deux vous montreront la différence entre les pointes des deux branches foo
et bar
. D'autre part, git diff foo...bar
vous montrera la différence entre la" base de fusion "des deux branches et la pointe de bar
. La " base de fusion "est généralement la dernière commit en commun entre ces deux branches, donc cette commande vous montrera les changements que votre travail sur bar
a introduit, tout en ignorant tout ce qui a été fait sur foo
dans l'intervalle.
C'est tout ce que vous devez savoir sur les notations ..
et ...
dans git diff
. Cependant...
... une source commune de confusion est que ..
et ...
signifient subtilement des choses différentes lorsqu'elles sont utilisées dans une commande telle que git log
qui attend un ensemble de commits comme un ou plusieurs arguments. (Ces commandes finissent toutes par utiliser git rev-list
pour analyser une liste de commits à partir de leurs arguments.)
la signification de ..
et ...
pour git log
peut être représentée graphiquement comme suit:
donc, git rev-list foo..bar
vous montre tout sur la branche bar
qui n'est pas aussi sur la branche foo
. D'autre part, git rev-list foo...bar
vous montre toutes les commits qui sont dans foo
ou bar
, mais pas les deux . Le troisième diagramme montre simplement que si vous listez les deux branches, vous obtenez les commits qui sont dans un seul ou les deux d'entre eux.
Eh bien, je trouve que tout cela un peu confus, quoi qu'il en soit, et je pense que les diagrammes de propagation aident:)
1 je dis seulement" typiquement "car lors de la résolution de conflits de fusion, par exemple, git diff
vous montrera une fusion à trois.
git diff foo master
Diff entre le haut (la tête) s'engage de foo et maître.
git diff foo..master
une Autre façon de faire la même chose.
git diff foo...master
Diff à partir de l'ancêtre commun ( git merge-base foo master
) de foo et maître à la pointe de maître. En d'autres termes, montre seulement les changements que la branche principale a introduit depuis son ancêtre commun avec foo.
cet exemple de GitHub explique Quand utiliser le deux:
par exemple, si vous créez une branche ' dev’ et ajoutez une fonction à une fichier, puis revenir à votre branche "maître" et de supprimer une ligne de la Lisez-moi, puis exécuter quelque chose comme ceci:
$ git diff master dev
Il vous dira qu'une fonction a été ajoutée dans le premier fichier et un une ligne a été ajoutée au README. Pourquoi? Parce que sur la branche, le README il a toujours la ligne d'origine, mais sur ' master’ vous l'avez enlevé-donc directement en comparant les instantanés, on dirait que ‘dev ' l'a ajouté.
ce que vous voulez vraiment comparer Est ce que ' dev’ a changé depuis votre les branches divergeaient. Pour ce faire, Git a un joli petit raccourci:
$ git diff master...dev
git diff foo master
montrera les différences entre le thème et la branche principale à ce moment-là
git diff foo..master
cela montrera également les différences entre le thème et la branche principale dans ce point dans le temps
git diff foo...master
cela montrera toutes les différences entre quand le sujet a été fait à partir de la branche et après
donc les 2 premières commandes sont les mêmes et la dernière montre une vue plus large dans le diff histoire