Récupère tous les commits git depuis la dernière balise


126

Quand je vais baliser un commit, j'ai besoin de savoir ce qui a changé depuis le dernier commit balisé. Par exemple:

a87a6sdf87a6d4 Some new feature
a87a6sdf87a6d3 Some bug fix
a87a6sdf87a6d2 Some comments added
a87a6sdf87a6d1 Some merge <- v1.4.0

Dans cet exemple, j'aimerais connaître les 3 derniers commits, ou pouvoir imprimer un journal comme ci-dessus, qui montre les deux commits leurs balises le cas échéant. Et quand je vois qu'une nouvelle fonctionnalité a été ajoutée, je la taguerais v1.5.0.

Comment gérez-vous cela? Est-ce ainsi que je suis censé utiliser les balises? Que dois-je écrire dans le message tag? Je laisse toujours ce champ vide:git tag -a v1.2.3 -m ''

Réponses:


224

git log <yourlasttag>..HEAD ?

Si vous les voulez comme dans votre exemple, sur la seule ligne avec l'identifiant de validation + message, alors

git log <yourlasttag>..HEAD --oneline

et si vous ne connaissez pas votre dernière balise ou que vous souhaitez que ce soit dynamique, vous pouvez le faire sur Windows

for /f "delims=" %a in ('git describe --tags --abbrev^=0') do @set latesttag=%a
git log %latesttag%..HEAD --oneline

et sur linux / git bash / windows bash

git log $(git describe --tags --abbrev=0)..HEAD --oneline

De plus, si vous avez un cas où vous connaissez une balise dans l'historique et que vous souhaitez tout imprimer, de cette balise à la situation actuelle, vous voudrez peut-être l'ajouter également --decorateafin d'imprimer toutes les balises intermédiaires.


Y a-t-il un moyen pour cela d'ignorer les validations de fusion?
Holloway

@Trengot ne sait pas, je n'ai pas examiné cela. Les commits de fusion IMO sont quelque chose à éviter de toute façon, j'utilise le rebasage à la place chaque fois que possible.
eis

La version Linux fonctionne également sur Git pour Windows Bash
kwesolowski

Ne devrait-il pas être <yourlasttag>+ 1?
Raffi Khatchadourian

@RaffiKhatchadourian si vous faisiez cela, vous manqueriez les modifications effectuées dans commit <yourlasttag>+ 1 et vous n'obtiendrez que des modifications après cela
eis le

39

Si votre commit actuel est également une balise et que vous souhaitez obtenir dynamiquement les modifications depuis la balise précédente, sans connaître la dernière balise ni le nom de la balise précédente, vous pouvez faire:

git log --oneline $(git describe --tags --abbrev=0 @^)..@

Notez que @c'est l'abréviation de HEAD.


nice !, si vous voulez juste que le texte des commits change --oneline en --pretty = format: "% s": git log --pretty = format: "% s" $ (git describe --tags --abbrev = 0 @ ^) .. @
JBarbosa
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.