Quelle est la meilleure façon d'obtenir un journal des validations sur une branche depuis le moment où elle a été branchée à partir de la branche actuelle? Jusqu'à présent, ma solution est la suivante:
git log $(git merge-base HEAD branch)..branch
La documentation de git-diff indique que git diff A...B
c'est équivalent à git diff $(git-merge-base A B) B
. D'un autre côté, la documentation de git-rev-parse indique qu'elle r1...r2
est définie comme r1 r2 --not $(git merge-base --all r1 r2)
.
Pourquoi sont-ils différents? Notez que cela git diff HEAD...branch
me donne les différences que je veux, mais la commande git log correspondante me donne plus que ce que je veux.
En images, supposons ceci:
x --- y --- z --- branche / --- a --- b --- c --- d --- e --- TETE
Je voudrais obtenir un journal contenant les commits x, y, z.
git diff HEAD...branch
donne ces commits- cependant,
git log HEAD...branch
donne x, y, z, c, d, e.
Réponses:
Dans le contexte d'une liste de révision, voici
A...B
comment lagit-rev-parse
définit. git-log prend une liste de révision.git-diff
ne prend pas de liste de révisions - il prend une ou deux révisions et a défini laA...B
syntaxe pour signifier comment elle est définie dans lagit-diff
page de manuel. Si ellegit-diff
n'était pas explicitement définieA...B
, cette syntaxe serait invalide. Notez que lagit-rev-parse
page de manuel décritA...B
dans la section "Spécification des plages" et que tout dans cette section n'est valide que dans les situations où une plage de révision est valide (c'est-à-dire lorsqu'une liste de révision est souhaitée).Pour obtenir un journal contenant uniquement x, y et z, essayez
git log HEAD..branch
(deux points, pas trois). Ceci est identique àgit log branch --not HEAD
, et signifie que tous les commits sur une branche qui ne sont pas sur HEAD.la source
git diff HEAD..branch
est identique àgit diff HEAD branch
. L'essentiel à retenir ici est que le journal prend une liste / plage de révisions, contrairement à diff. C'est pourquoi ils traitent leurs arguments différemment.git diff HEAD...branch
(trois points) correspond à la sortie degit log HEAD..branch
fait exactement ce que vous demandez, lorsque vous êtes dans la
master
succursale.J'aime aussi beaucoup:
Ce qui n'est pas exactement ce que vous demandez, mais est toujours très utile dans le même contexte.
la source
git cherry
est très utile en effet. Merci :)gif-diff
:git diff x..z
ou pour mon propre exemple , il estgit diff 13bc4d..8eda3a
.Ce que vous voulez voir, c'est la liste des validations sortantes. Vous pouvez le faire en utilisant
ou
Où je suppose que "branchName" a été créé en tant que branche de suivi de "master".
De même, pour voir les modifications entrantes, vous pouvez utiliser:
la source
Ceci est similaire à la réponse que j'ai postée sur: Aperçu d'un push Git
Déposez ces fonctions dans votre profil Bash:
Vous pouvez utiliser ceci comme:
Cela fonctionnera avec n'importe quelle branche.
la source
Semblable à plusieurs réponses comme Alex V et NDavis, mais aucune d'entre elles n'est tout à fait la même.
Déjà dans la branche en question
En utilisant:
Qui combine plusieurs fonctionnalités:
Mettre à jour:
Cela devrait probablement être le cas
git diff master
, mais cela montre aussi le diff, pas les commits comme la question spécifiée.la source
git co master; git pull
depuis que vous avez créé la branche,git diff master
il ne sera pas très utile d'obtenir les différences introduites UNIQUEMENT par des validations dans la branche spécifiée.git diff <branch1>...<branch2>
affichera les changements introduits parbranch2
.Ajoutez un -p pour voir des changements de fichiers
Faites quelques alias:
Voir les engagements uniques d'une succursale:
la source
Pour voir le journal de la branche actuelle depuis la dérivation du maître:
git log master...
Si vous êtes actuellement sur le maître, pour voir le journal d'une branche différente depuis qu'il a dérivé du maître:
git log ...other-branch
la source
(3dots) mais parfois il montre '+' au lieu de '='
la source
j'ai trouvé
plus utile, car vous obtenez non seulement les messages de commit, mais l'ensemble du diff. Si vous êtes déjà sur la branche dont vous souhaitez voir les modifications et (par exemple) pour voir ce qui a changé pour le maître, vous pouvez utiliser:
la source