2017-01-17 2 views
1

J'essaie de rassembler la liste des commits dans la plage [NOW, THEN], où NOW est HEAD et [THEN] est 8af39377, et c'est environ 120 il y a.Pourquoi git pense que HEAD est le premier commit d'il y a 17 ans?

When I run:

> git log 8af39377289feba1876b3252b6d23 HEAD --oneline | cut -d " " -f 1 > commits.txt 

puis regarder commits.txt, ses 2300 lignes longues et il montre la première entrée en 8af39377 (le THEN) et l'entrée inférieure comme a3b6ece (la première commettras de 2002).

Pourquoi Git pense que HEAD est la première validation dans le référentiel?

+2

Refusé d'avoir utilisé Git pendant 17 ans. –

+0

@TimBiegeleisen - Merci. C'est après une migration. – jww

+0

Veuillez jeter un oeil à la 2ème réponse de stackoverflow.com/questions/462974. Il démontre A..B et A ... B. 'git log A B' est l'ensemble {A, B} ou A∪B. – ElpieKay

Répondre

3

Votre syntaxe est erronée. Si vous voulez la plage entre 8af39 et HEAD alors vous avez besoin 8af39..HEAD

Comme pour WHY il y a 17 ans, si vous spécifiez une seule révision, il trouvera toutes les validations REACHABLE par ce commit. Puisque toutes les validations ont des pointeurs en arrière jusqu'à la racine, vous trouvez la validation racine.

Revision Specification Voir la section sur la spécification d'une plage.

+1

Je suppose que ce n'est pas une surprise ... J'ai suivi les instructions de la réponse citée de '', qui produit la sortie ci-dessus. Votre réponse ne produit aucune sortie.Et pas de surprise que Git ne produise pas d'avertissement ou d'erreur. Quel outil misérable ... – jww

+0

Pouvez-vous vérifier quelques choses pour moi. 1) Vous utilisez en effet 2 points au lieu de 3? 2) Votre HEAD est en effet après 8af39? Je veux juste m'assurer que l'ordre des commits est correct. 3) 8af39 est en effet accessible par HEAD/votre branche actuelle. Assurez-vous que vous utilisez simplement la commande 'git log blah blah' pour éliminer' cut' comme source d'erreurs. – jbu

+0

Il y a un détail supplémentaire que je dois mentionner. Cela fonctionne si HEAD n'est pas un commit de fusion. Si HEAD est un commit de fusion, alors le résultat de la commande que je vous ai donné comprendra également des commits qui ne seront peut-être pas accessibles par 8af39. Il pourrait énumérer quelques commits supplémentaires plus récents que la base de fusion. – jbu

1
git log 8af39377289feba1876b3252b6d23 HEAD --oneline 

qui dit: « donnez-moi l'histoire de ces deux commits, triés par date de l'ordre limité par l'ascendance ».

Vous voulez

la liste des commits dans l'intervalle [maintenant,], où est maintenant à la tête et [alors] est 8af39377, et son 120 engage il y a

mais votre log sortie vous contredit sur ce qui est qui: git log montre sa sortie la plus récente en premier, contraint par l'ascendance, et

il montre la première entrée en 8af39377.

de sorte que vous vous trompez sur votre commande de validation. Si vous n'aviez pas désactivé la sortie par défaut, elle vous aurait également indiqué explicitement les dates de validation, afin que vous puissiez voir s'il s'agit d'un problème de date ou d'ascendance.

Peu importe où il est,

git log --oneline HEAD..8af39377 

vous montrera la liste. Il pourrait être utile d'ajouter --graph --decorate.

+0

pense que c'est en arrière, n'est-ce pas? 8af39377 est de 120 commits avant HEAD. HEAD..8af39377 est les commits accessibles depuis 8af39377 avec les commits accessibles depuis HEAD. Donc vous excluez les choses après 8af39377 ici. – jbu

+0

Comme je l'ai dit, la sortie de votre journal vous contredit: '8af39377' apparaît en premier, ce qui signifie que ce n'est pas un ancêtre de' HEAD' (sinon 'HEAD' serait arrivé en premier) et a une date plus récente (sinon 'HEAD' serait venu en premier). En passant, votre 'cut' vous donne juste les identifiants de commit, si vous ne voulez pas afficher la version de revs, pourquoi ne pas utiliser' git rev-list' ('git log') - ainsi que tout un tas de choses d'autres commandes de marche de révision ») plus de taureaux focalisés sur le laser) ou« git log --pretty =% H'? – jthill

+0

Vous n'avez pas parlé à l'op. Bien que je me demande ce que vous pensez git log commit1 commit2 fait. En fait les docs semblent un peu floues sur ce qui devrait arriver mais je pense que le commit1 est traité comme le commit et le commit deux est traité comme un path car c'est un treeish et va se résoudre à l'arbre racine – jbu