2016-10-25 3 views
1

Je suis sur la branche A et la branche B est en avance. Je veux voir les changements dans B de A, mais quand je cours git diff B il montre ses ajouts comme des suppressions et vice-versa, et si je veux mettre B changements dans la copie de travail de A (souhaitable si j'ai un test branche offshoot), en essayant d'exécuter git diff B > Bfile puis git apply Bfile juste jette un tas d'erreurs.Strange git diff comportement

Si je tape à la place git diff A..B (je suis déjà sur A) il montre les changements corrects.

Alors pourquoi la première commande affiche-t-elle les changements comme des suppressions lorsqu'ils sont des ajouts? Il semble redondant et contre-intuitif d'avoir à dactylographier la branche que je suis déjà quand je veux juste les changements précis avec une autre branche.

Répondre

0

(Notez que git diff A B est synonyme de git diff A..B, donc je vais utiliser les deux de manière interchangeable dans cette réponse.)

Le comportement que vous avez décrit est parce que git diff B est équivalent à git diff B HEAD, qui montre les changements deBàHEAD. Votre solution de contournement, git diff A..B est valide (comme le serait git diff HEAD..B). Pour ignorer l'obligation de préciser la branche A, (ou HEAD), faites:

git diff ..B 

Cela indiquera Git remplir HEAD sur la place à gauche, il est donc équivalent à git diff HEAD..B.

+1

Vous pouvez également abréger 'HEAD' comme' @ ', par exemple' git diff @ B'. Et, vous pouvez utiliser '-R' pour inverser la direction d'un diff, de sorte que vous pouvez écrire cela comme' git diff -R B'. (Je voudrais juste écrire HEAD, ce n'est pas si difficile à taper et il semble plus clair :-)) – torek