262 votes

Comment puis-je trouver le prochain commit git ?

se réfère à la validation avant de , qu’en est-il pour la validation après`` ?

Par exemple, si je `` Comment vérifier le prochain commit ?

Merci.

PS Oui, git est un DAG noeud pointeur struct arbre peu importe. Comment puis-je trouver le commit après celui-ci ?

206voto

Tim Hunt Points 546

La liste de tous les commits, à partir de l'actuel, puis avec son enfant, et ainsi de suite - essentiellement de la norme git log, mais dans l'autre sens dans le temps, utilisez quelque chose comme

git log --reverse --ancestry-path 894e8b4e93d8f3^..master

où 894e8b4e93d8f3 est le premier commit que vous voulez montrer.

40voto

VonC Points 414372

Le créateur de Hudson (maintenant Jenkins) kohsuke nous Kawaguchi vient de paraître (novembre 2013):
kohsuke nous / git-enfants-de:

Compte tenu d'un commit, trouver des enfants immédiats de ce commit.

#!/bin/bash -e
# given a commit, find immediate children of that commit.
for arg in "$@"; do
  for commit in $(git rev-parse $arg^0); do
    for child in $(git log --format='%H %P' --all | grep -F " $commit" | cut -f1 -d' '); do
      git describe $child
    done
  done
done

Comme illustré par ce fil, dans un VCS, basée sur l'histoire représentée par un DAG (Graphe Dirigé Acyclique), il n'est pas "un parent" ou "un enfant".

        C1 -> C2 -> C3
      /               \
A -> B                  E -> F
      \               /
        D1 -> D2 ----/

La commande de commit est fait par "topo-de l'ordre" ou "date de commande" (voir GitPro livre)

Mais depuis Git1.6.0, vous pouvez répertorier les enfants d'un commit.

git rev-list --children
git log --children

Remarque: pour le parent s'engage, vous avez le même problème, avec le suffixe ^ pour une révision paramètre de sens le premier parent de cet objet commit. ^<n> signifie que l' <n>th parent (soit rev^ est équivalent à rev^1).

Si vous êtes sur la branche foo et question "git merge bar" alors foo sera le premier parent.
I. e: Le premier parent est la branche que vous étiez lorsque vous avez fusionné, et le second est le commit sur la branche que vous avez ajouté.

22voto

white_gecko Points 1362

ce que j'ai trouvé est

git rev-list --ancestry-path commit1..commit2

où j'ai mis commit1 que le commit courant et commit2 pour l'actuel chef. Cela me renvoie une liste de tous les commits qui construire un chemin entre commit1 et commit2.

La dernière ligne de la sortie de l'enfant de commit1 (sur le chemin de la commit2).

11voto

vontrapp Points 79

Je sais ce que tu veux dire. C'est frustrant d'avoir abondante syntaxe pour aller à la précédente s'engage, mais aucun pour passer à la suivante. Dans une histoire complexe, le problème de "qu'est-ce que le prochain commit" devient plutôt difficile, mais ensuite dans le complexe de la fusion de la même dureté émerge avec "précédent" s'engage ainsi. Dans le cas simple d'une unique branche avec une histoire linéaire (même seulement localement, pour un certain nombre limité de commits), il serait bien de trouver un sens à aller de l'avant et vers l'arrière.

Le vrai problème avec cela, cependant, est que les enfants s'engage ne sont pas référencées, c'est un arrière-liste liée. Trouver un enfant à commettre prend de recherche, ce qui n'est pas trop mauvais, mais probablement pas quelque chose de git veut mettre dans le refspec logique.

En tout cas, je suis tombé sur cette question, parce que je veux simplement faire un pas en avant dans l'histoire de la commettre à un moment, faire des tests, et parfois, vous avez à l'étape de l'avant et non vers l'arrière. Eh bien, avec un peu plus de réflexion, je suis venu avec cette solution:

Choisissez une livraison à l'avance de l'endroit où vous êtes. Cela pourrait probablement être un chef de la direction générale. Si vous êtes à la branche~10, puis "git checkout branch~9" puis "git checkout branch~8" pour obtenir le prochain après que, puis "git checkout branch~7" et ainsi de suite.

Décrémenter le nombre doit être vraiment facile dans un script si vous en avez besoin. Beaucoup plus facile que l'analyse git rev-liste.

6voto

Novelocrat Points 12126

Il n'est pas unique "prochain commit". Parce que l'histoire dans Git est un DAG, et pas une ligne, de nombreux commet peut avoir un parent commun (les branches), et s'engage peut avoir plus d'un parent (fusion).

Si vous avez une branche particulière à l'esprit, vous pouvez consulter son journal et de voir ce que commettre des listes de l'espèce en tant que parent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X