connectez-vous les 10 premiers dans git

89

Deux questions:

  1. Comment afficher les 10 premiers commit dans git du début à la fin. (pas de succursale)
  2. Comment spécifier l'index de validation et le consigner. (montrer le deuxième ou le troisième)

Je sais que git use parent pour lier le commit, il est facile d'enregistrer le commit de la fin au début. comme:git log HEAD~10

Mais j'ai besoin d'interroger du début à la fin, est-ce possible?

yohan zhou
la source
Faites défiler jusqu'à @kostix answer
Muhammad Umer

Réponses:

59

Enregistrez simplement tout avec un format de ligne et suivez la sortie:

git log  --pretty=oneline | tail -n 10 
CharlesB
la source
Génial! C'est ce que je recherche. Tks @CharlesB.
yohan zhou
3
Ou utilisez git rev-list HEAD | tail -n 10pour obtenir les 10 identifiants à lister, que vous pouvez ensuite afficher dans le format de votre choix (sans se limiter à la méthode sur une ligne).
torek
15
tailsemble perdre la belle coloration que j'obtiens dans ma console git. Passer un paramètre comme git log --oneline -10dans l'autre réponse fonctionne comme je m'y attendais.
James Hulse
4
C'est clairement la manière Unix hard-core, lol. Veuillez consulter la réponse @kostix.
9301293
1
L'inconvénient de cette méthode est que je ne peux voir que mes commits poussés.
Jack le
245
git log -10

Affiche 10 derniers commits correspondant à la spécification de révision (une spécification manquante signifie «tous les commits»).

Voir la page de manuel:

git help log

section Commit Limiting

-<number>, -n <number>, --max-count=<number>
    Limit the number of commits to output.
Kostix
la source
6
simple et ne dépend pas de la taildisponibilité sur votre plateforme.
tenpn
8
& ne joue pas avec le formatage / la coloration git. Cela devrait être la réponse acceptée x100
kuzyn
10
Pas ce que l'opératrice voulait: il voulait le first10, pas le latest.
Timo
1
@Timo, très probablement oui, mais la question telle qu'énoncée est ouverte à l'interprétation, et beaucoup de gens semblent finir par voter ma réponse juste à cause de ces différences ouvertes. Donc, même si je suis techniquement d'accord avec vous, gardons-le tel quel, je suppose ;-) Parmi les suggestions techniquement correctes, j'aime le plus le commentaire de torek sur la réponse acceptée.
kostix
@kostix "Comment afficher les 10 premiers commit dans git du début à la fin" n'est pas "ouvert à l'interprétation" en ce qui me concerne. Il demande évidemment les 10 premiers commits, pas le dernier .
Bobby Jack
29

Voici ma démarche,

Pour obtenir les 10 premiers commits:

git log -n 10

-n est un nombre

Additionnel Pour obtenir les 10 prochains commit, passez les 10 premiers:

git log --skip=10 -n 10
Nayagam
la source
Je pense que cela devrait être la réponse acceptée. L'utilisation de tail entraînera l'arrêt de --graph dans git log
relief.melone
Cela doit être la réponse acceptée. fonctionne comme un charme pour moi
Doogle
vous perdez également la couleur de la police sur la console en utilisant tail. c'est la bonne réponse
CESCO
14

Pour obtenir les 10 derniers commits:

git log HEAD~10..HEAD

Pour les obtenir dans l'ordre du plus ancien au plus récent:

git log --reverse HEAD~10..HEAD

Notez que s'il y a des fusions, cela peut afficher plus de 10 validations; ajoutez --first-parentsi vous souhaitez uniquement traverser le premier parent de chaque branche.

Pour plus de détails, consultez la documentation de git rev-list.


Edit: Vous avez déjà obtenu une réponse utile ci-dessus pour "afficher les commits près du début de l'historique" (encore une fois, consultez les mises en garde concernant plusieurs DAG de commit non connectés dans un dépôt). Mais vous pouvez également faire, par exemple:

git log --no-walk `git rev-list HEAD | tail -n 10`

et:

git log --no-walk `git rev-list --reverse HEAD | head -n 10`

selon l'ordre dans lequel vous souhaitez obtenir les résultats.

Torek
la source
Merci pour votre réponse. Mais je n'ai pas besoin des 10 derniers commits mais du premier. Pour être précis, si le commit est ABCDEFG (HEAD). Comment enregistrer l'ABC et comment enregistrer C par l'indice 2?
yohan zhou
Oh! Il n'y a aucune garantie qu'il y ait un seul "premier commit", mais s'il y en a, voir le lien @CharlesB ajouté.
torek
Le chemin peut être le travail. d'une manière naturelle? git log --pretty = oneline | wc -l git log HEAD ~ <Le nombre moins un ou index>
yohan zhou
Merci d'avoir répondu. C'est ce dont j'avais besoin pour éviter les options de style '-10' dans mes alias git. qui acceptent les arguments numériques.
vicTROLLA
11

le meilleur résultat vient avec la combinaison des deux meilleures réponses:

git log --pretty=oneline -10
andrej
la source
1
Merci, je l'utilise comme alias git pour afficher rapidement les commits récents sans remplir mon terminal. J'ai appelé l'alias lkj = log --pretty=oneline --abbrev-commit -10. Maintenant, je me rends compte que cela ne répond pas à la question de l'OP, mais je suis venu ici à la recherche du simple changement de numéro.
Paul Rougieux
4

Consignez simplement tout à l'envers -1 signifie listez un journal

git log  --reverse -1
Nickleefly
la source
2

J'utiliserais ci-dessous la commande de syntaxe simple;

git log -10 --oneline
RAVI PATEL
la source
1
Pensez que c'est le moyen le plus efficace!
Nishant
0

Parce que ... plus de détails: p

  1. Comment afficher les 10 premiers commit dans git du début à la fin. (pas de succursale)
  2. Comment spécifier l'index de validation et le consigner. (montrer le deuxième ou le troisième)

Par (pas de branche), vous pourriez poser des questions sur la reflogchaîne d'ascendance plutôt que sur une chaîne d'ascendance donnée. Ce qui suit n'a rien à voir avec la branche sur laquelle vous vous trouvez.

git log -g --pretty=oneline | tail -10

<sha> HEAD@{###}: action: summary (old)
<sha> HEAD@{###}: action: summary (older)
...
<sha> HEAD@{###}: action: summary (oldest)
  • -gest --walk-reflogslieu de marcher la chaîne commettras origine, marcher entries.q reflog
  • ajouter |cut -d ' ' -f 2|tr -d ':' > logpour consigner uniquement l'index de validation reflog.

Ce qui suit montre les premiers ancêtres de la branche actuellement extraite.

git log --reverse --pretty=oneline | head -10 | cat -n

1 <sha> summary (oldest)
2 <sha> summary (second)
  • --reverse Sortez les validations dans l'ordre inverse.
  • Je ne peux pas utiliser simplement -n 10ou -10depuis qu'il se brise--reverse
  • cat -n ajoute des numéros de ligne (index de validation?)

ici
la source
0

Au cas où quelqu'un voudrait plus qu'un simple journal git en une ligne:

git log --reverse | awk 'NR>1 {print last} {last=$0}; /^commit/ && ++c==11{exit}'

où le 11à la fin doit être défini sur 1plus que le nombre de validations souhaité.

Comme indiqué ici , git log --reverse -n 10ne fonctionne pas comme vous en avez besoin. ( Je suppose que cela devrait être non commutatif pour vous donner la possibilité de choisir les 10 premiers commits dans l'ordre inverse ou les 10 derniers commits 🤪)

Cameron Stone
la source