J'ai un projet qui a une longue histoire. Je veux montrer le premier commit sur git.
Comment puis-je faire cela?
J'ai un projet qui a une longue histoire. Je veux montrer le premier commit sur git.
Comment puis-je faire cela?
Réponses:
git rev-list --max-parents=0 HEAD
(d' après le commentaire de tiho . Comme le remarque Chris Johnsen , a --max-parentsété présenté après la publication de cette réponse.)
Techniquement, il peut y avoir plus d'un commit racine. Cela se produit lorsque plusieurs historiques précédemment indépendants sont fusionnés. Il est courant lorsqu'un projet est intégré via une fusion de sous - arborescences .
Le git.gitréférentiel a six validations racine dans son graphique d'historique (une pour la validation initiale de Linus, gitk , certains outils initialement séparés, git-gui , gitweb et git-p4 ). Dans ce cas, nous savons que e83c516c'est celui qui nous intéresse probablement. Il s'agit à la fois du premier commit et d'un commit racine.
Ce n'est pas si simple dans le cas général.
Imaginez que libfoo est en développement depuis un certain temps et conserve son historique dans un référentiel Git ( libfoo.git). Indépendamment, le projet «bar» est également en cours de développement (en bar.git), mais pas depuis aussi longtemps libfoo (la validation avec la date la plus ancienne en libfoo.gita une date qui précède la validation avec la date la plus ancienne en bar.git). À un moment donné, les développeurs de «bar» décident d'incorporer libfoo dans leur projet en utilisant une fusion de sous-arborescences. Avant cette fusion, il aurait pu être trivial de déterminer le «premier» commit bar.git(il n'y avait probablement qu'un seul commit root). Après la fusion, cependant, il y a plusieurs validations racine et la première validation racine vient en fait de l'histoire de libfoo, pas «bar».
Vous pouvez trouver tous les validations racine de l'historique DAG comme ceci:
git rev-list --max-parents=0 HEAD
Pour mémoire, si elles --max-parentsn'étaient pas disponibles, cela fonctionne également:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Si vous avez des balises utiles en place, cela git name-revpourrait vous donner un aperçu rapide de l'historique:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin
Utilisez-le souvent? Difficile à retenir? Ajouter un alias git pour un accès rapide
git config --global alias.first "rev-list --max-parents=0 HEAD"
Maintenant, vous pouvez simplement faire
git first
git rev-list --max-parents=0 HEADqu'il fera de même et est un peu plus simple.
Je l'ai trouvé:
git log --reverse
affiche les commits depuis le début.
git log --reverse -5fait intéressant de le faire ignorer --reversepour une raison quelconque
Vous pouvez simplement inverser votre journal et le diriger pour le premier résultat.
git log --pretty=oneline --reverse | head -1
git log --reverseinverse l'historique, vous devez donc utiliser head -1au lieu de tail -1pour obtenir le premier commit.
-ndrapeau quand --reverseest donné.
git log --format="%h" | tail -1vous donne le hachage de validation (c'est-à-dire 0dd89fb), que vous pouvez alimenter dans d'autres commandes, en faisant quelque chose comme
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD pour afficher tous les commits du dernier jour.
git log -1.