web-dev-qa-db-fra.com

Comment obtenir l'historique de commit pour une seule branche?

Supposons que j'ai créé une nouvelle branche my_experiment à partir de master et que j'ai effectué plusieurs commits sur my_experiment. Si je fais un git log sur my_experiment, je vois les commits effectués sur cette branche, mais également ceux effectués sur master avant la création de la branche my_experiments.

Il me serait très utile de voir l'historique de tous les commits dans la branche my_experiments jusqu'à la création de cette branche - une véritable histoire de cette branche. Autrement, lorsque je regarde dans le journal, il n’est pas clair si les commits étaient sur la branche my_experiments ou non.

Y a-t-il un moyen de faire cela avec Git?

106
Marplesoft

Vous pouvez utiliser une plage pour le faire.

git log master..

Si vous avez vérifié votre branche my_experiment. Ceci comparera où master est à HEAD (la pointe de my_experiment).

113
alex

La commande git merge-base peut être utilisée pour trouver un ancêtre commun. Ainsi, si mon_expérience n’a pas encore été fusionnée dans le maître et que mon_expérience a été créée à partir du maître, vous pouvez:

git log --oneline `git merge-base my_experiment master`..my_experiment
6
cforbish

Remarque: si vous limitez ce journal au n dernier commit (les trois derniers, par exemple, git log -3), veillez à laisser un espace entre 'n' et votre branche:

git log -3 master..

Avant Git 2.1 (août 2014), cette erreur: git log -3master.. vous montrerait en réalité les 3 derniers commits de la branche courante (ici my_experiment), en ignorant la limite master (signifiant si my_experiment contient seulement un commit, 3 seraient toujours listés, 2 d'entre eux de master)

Voir commit e3fa568 par Junio ​​C Hamano (gitster) :

révision: analyser "git log -<count>" plus attentivement

Cette ligne de commande mal orthographiée ignore simplement "master" et finit par afficher deux validations à partir du HEAD actuel:

$ git log -2master

parce que nous alimentons "2master" en atoi() sans nous assurer que la chaîne entière est analysée comme un entier.

Utilisez plutôt la fonction d'assistance strtol_i().

3
VonC

Je pense qu'une option pour vos besoins est git log --oneline --decorate. Cela vous permet de connaître la validation cochée et les principaux validations pour chaque branche que vous avez dans votre récit. En faisant cela, vous avez une vue agréable de la structure de votre repo et des commits associés à une branche spécifique. Je pense que lire this pourrait aider.

1
Daniel Casas

Vous ne pouvez utiliser que git log --oneline

1
Manoj Rana

Je sais que c'est très tard pour celui-ci ... Mais voici un oneliner (pas si simple) pour obtenir ce que vous cherchiez:

git show-branch --all 2>/dev/null | grep -E "\[$(git branch | grep -E '^\*' | awk '{ printf $2 }')" | tail -n+2 | sed -E "s/^[^\[]*?\[/[/"
  • Nous répertorions les commits avec le nom de la branche et les positions relatives par rapport aux états de branche réels avec git show-branch (envoi des avertissements à /dev/null).
  • Ensuite, nous ne conservons que ceux avec le nom de notre branche à l'intérieur du crochet avec grep -E "\[$BRANCH_NAME".
  • $BRANCH_NAME réel est obtenu avec git branch | grep -E '^\*' | awk '{ printf $2 }' (la branche avec une étoile, répercutée sans cette étoile).
  • De nos résultats, nous supprimons la ligne redondante au début avec tail -n+2.
  • Ensuite, nous effaçons définitivement le résultat en supprimant tout ce qui précède [$BRANCH_NAME] avec sed -E "s/^[^\[]*?\[/[/".
0
menssana