Comment puis-je faire l'ordre du journal git en fonction de l'horodatage de l'auteur?

J'utilise une command git-log assez complexe impliquant --date-order pour get une vue d'set de l'état de mon repository; mais malheureusement, --date-order semble utiliser la date committer , pas la date de l' auteur . Cela signifie que chaque fois que je mets à jour mes twigs sujet en les réajustant sur le courant en amont, je perds l'ordre chronologique utile dans mon git-log des commits relatifs dans mes twigs de sujet (chaque twig devient une seule longue ligne , parce que tous ses commits ont été rebasés en horodateurs committer séquentiels et presque identiques.)

Si je pouvais get git-log pour commettre des commits par l' auteur timestamp au lieu de l'horodateur committer , cela serait résolu. Est-ce que quelqu'un connaît un moyen de le faire?


Pour ceux qui visitent ce résultat de Google, vous pouvez regarder dans la solution de josephdpurcell (et blog de profondeur !), Ci-dessous. C'est très bien, si vous cherchez une sortie de style git-log standard, multi-ligne, avec des messages détaillés sur chaque commit.

Malheureusement, je dois maintenant modifier cette question, car je suis un idiot et je n'ai pas fourni d'informations plus précises sur mon cas d'utilisation: j'utilise git-log en "mode --graph ", et j'ai besoin de faire des git-log lui-même fonctionne dans l'ordre de l'auteur-date. Autant que j'ai pu le constater, c'est complètement impossible à faire de l'extérieur de git-log , parce que git-log s'occupe lui git-log même de l'ordre et de l'printing du graphique.

Un script, ou un correctif pour git-log , peut être nécessaire, semble-t-il. Je laisserai ceci ouvert jusqu'à ce que quelqu'un puisse 1. écrire un tel script, ou 2. nous pouvons parler aux auteurs git en incluant une combinaison de drapeaux --author --date-order . (=


Pour reference, voici à quoi ressemble la sortie de ma fonction glog actuelle, et ce que j'ai besoin de réorganiser:

sortie glog

Solutions Collecting From Web of "Comment puis-je faire l'ordre du journal git en fonction de l'horodatage de l'auteur?"

git version 1.8.4 a ajouté un --author-date-order à git log ; selon les notes de publication , "la sortie est sortingée topologiquement et valide en parallèle les historiques sont montrés mélangés set en fonction de l'horodateur de l'auteur".

D'accord, cela m'a pris beaucoup de time pour comprendre ( détails ). Bref, j'ai trouvé beaucoup d'exemples incomplets ou incorrects. La command suivante fait ce que je pense que vous attendez:

 $ git log --pretty="format:%at %C(yellow)commit %H%Creset\nAuthor: %an <%ae>\nDate: %aD\n\n %s\n" | sort -r | cut -d" " -f2- | sed -e "s/\\\n/\\`echo -e '\n\r'`/g" | tr -d '\15\32' | less -R 

Vous pouvez find ce script et d'autres dans Git Extras sur GitHub.

--date-order / --topo-order ne contrôle vraiment que l'ordre des validations dans une list de révision lorsque vous visualisez plusieurs twigs en même time qu'une autre. La relation "x est-un-parent de y" est toujours respectée, même si votre horodateur committer / authoring est dans un passé lointain ou futur.

Vous auriez besoin de quelque chose comme git log --pretty="format:%at %H" | sort -g git log --pretty="format:%at %H" | sort -g et ensuite réinjecter les hachages dans git log .

Construire de ce que Jørgensen a suggéré il y a une solution «one-liner» qui peut vous donner ce que vous searchz. Formaté ici pour un affichage plus facile. Les améliorations sont les bienvenues!

 SORTED_GIT_LOGS=$(git log --pretty="format:%at %H" | sort -g | cut -d' ' -f2); \ IFS=$(echo -en "\n\b"); for LOG in $SORTED_GIT_LOGS; do \ git show --name-only $LOG; \ done | less