web-dev-qa-db-fra.com

Y at-il un moyen rapide de "git diff" à partir de l'origine du point ou de la branche?

J'ai examiné diverses SO réponses concernant l'utilisation de git diff et de révisions git (HEAD, ORIG_HEAD, FETCH_HEAD, etc.) et je n'ai toujours pas trouvé de moyen simple de répertorier les modifications apportées depuis le début de la procédure locale. branche, ou depuis la dernière base.

Par facile je veux dire sans avoir à chercher et à coller commit SHA ou à compter le nombre de commits que je veux regarder en arrière.

git diff Origin/master est proche, mais il fait référence à remote qui peut avoir divergé depuis que j'ai extrait une nouvelle branche de celle-ci. 

Je m'attendrais à ce que quelque chose comme git diff BASE_HEAD soit disponible.

... sauf s'il existe déjà un moyen de le faire. Est-ce que quelqu'un a la réponse?

34
user776686

Utilisez git diff @{u}...HEAD, avec trois points.

Avec deux points, ou avec HEAD omis, cela affichera les différences des modifications des deux côtés.

Avec trois points, il ne montrera que les différences des changements de votre côté.

Edit: pour les personnes ayant des besoins légèrement différents, vous pourriez être intéressé par git merge-base (notez qu'il a beaucoup plus d'options que les autres réponses utilisées).

21
o11c

Vous pouvez trouver le point branch à l'aide de git merge-base. Prenez comme nom master la ligne principale et dev la branche dont vous êtes intéressé par l'histoire. Pour trouver le point auquel dev a été dérivé de master, exécutez:

git merge-base --fork-point master dev

Nous pouvons maintenant différencier dev par rapport à cette base:

git diff $(git merge-base --fork-point master dev)..dev

Si dev est la branche current, ceci simplifie:

git diff $(git merge-base --fork-point master)

Pour plus d'informations, voir git-merge-base documentation .

27
frasertweedale

Vous pouvez différencier la branche actuelle du point de départ de la branche en utilisant:

git diff (start point)...

Où (point de départ) est un nom de branche, un identifiant de validation ou une balise.

Par exemple, si vous travaillez sur une branche issue de develop, vous pouvez utiliser:

git diff develop...

pour tous les changements sur la branche actuelle depuis le point de branche.

Cela a déjà été mentionné dans un commentaire, mais je pense que cela mérite le statut de réponse. Je ne sais pas ce qu'il va faire depuis le dernier rebasement.

5
crimbo

Pour les diffs, vous voulez la notation à trois points. Si votre branche s'appelle dev et qu'elle est issue de master:

% git diff master...dev

Pour le journal, vous voulez la notation à deux points:

% git log master..dev

La syntaxe de révision r1..r2 (avec deux points) signifie "tout ce qui est accessible depuis r2 (inclus) mais non accessible depuis r1 (inclus)". La façon habituelle d’utiliser ceci est de penser que r1 et r2 spécifient une plage dans une séquence de commits (r1 exclusif, r2 inclus), donc si vous avez 10 révisions, 3..7 affichera les modifications 4, 5, 6 et 7. C'est {1, 2, 3, 4, 5, 6, 7} moins {1, 2, 3}. Mais r1 ne doit pas nécessairement être un ancêtre de r2. Pensez-y plus à une opération d'ensemble où r1 représente l'ascendance entière de r1 à l'envers, et r2 à l'ascendance complète de r2 à l'envers, et vous soustrayez le premier ensemble du second ensemble.

Donc alors:

git log master..dev

est toute l’histoire de la branche moins toute l’histoire du maître. En d'autres termes, juste la branche.

1
Lawrence Kesteloot

Pour se différencier de la branche maître distante:

git diff $(git merge-base HEAD Origin/master)..
0
Harald Nordgren

Dans Visual Studio 2017, il existe un moyen confortable d'afficher les différences:

  1. Dans Team Explorer -> Branches, cliquez avec le bouton droit sur la branche et sélectionnez Afficher l'historique.

 View History

  1. Dans le contrôle Historique - branche, sélectionnez les commits que vous souhaitez utiliser, puis sélectionnez Compare Commits.

 Compare Commits

Vous obtenez un aperçu des différences de Nice et vous pouvez ouvrir les fichiers en mode de comparaison.

0
Felix Keil