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?
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).
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 .
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.
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.
Pour se différencier de la branche maître distante:
git diff $(git merge-base HEAD Origin/master)..
Dans Visual Studio 2017, il existe un moyen confortable d'afficher les différences:
Vous obtenez un aperçu des différences de Nice et vous pouvez ouvrir les fichiers en mode de comparaison.