J’utilise une commande git-log
assez complexe impliquant --date-order
pour avoir un aperçu de l’état de mon repository; mais malheureusement, --date-order
semble utiliser la date du committer , pas la date de l’ auteur . Cela signifie que chaque fois que je met mes twigs à jour en les rebasant en amont, je perds l’ordre chronologique utile dans mon git-log
des commits relatifs dans mes twigs de sujet (chaque twig devient une longue ligne unique). , parce que tous ses commits ont été rebasés sur des horodatages séquentiels et presque identiques.
Si je pouvais obtenir que git-log
ordonne les commits par l’horodatage de l’ auteur au lieu de l’horodatage du committer , cela serait résolu. Est-ce que quelqu’un sait comment faire ça?
Pour ceux qui visitent ceci à partir des résultats de Google, vous voudrez peut-être examiner la solution de josephdpurcell (et l’article de blog en profondeur !) Ci-dessous. C’est tout à fait excellent si vous recherchez une sortie standard de style git-log
, multi-lignes, avec des messages détaillés sur chaque validation.
Malheureusement, j’ai maintenant besoin de 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 « --graph
mode», et je dois créer git-log
lui-même fonctionne en auteur-date-ordre. Autant que j’ai pu le constater, cela est complètement impossible en dehors de git-log
, car git-log
gère lui git-log
même le classement et l’impression des graphiques.
Un script, ou un patch pour git-log
, peut être nécessaire, semble-t-il. Je vais laisser cela ouvert jusqu’à ce que quelqu’un puisse 1. écrire un tel script, ou 2. on peut parler aux auteurs de git
en incluant une combinaison de drapeaux --author --date-order
. (=
Pour référence, voici à quoi ressemble la sortie de ma fonction glog
et ce que je dois réorganiser:
git version 1.8.4 a ajouté un --author-date-order
à git log
; Selon les notes de version , “la sortie est sortingée topologiquement et les validations dans des historiques parallèles sont affichées mélangées en fonction de l’horodatage de l’auteur.”
Ok, cela m’a pris beaucoup de temps pour comprendre ( détails ). En bref, j’ai trouvé de nombreux exemples qui étaient incomplets ou incorrects. La commande 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 trouver ce script et d’autres dans Git Extras sur GitHub.
--date-order
/ --topo-order
ne contrôle que l’ordre des commits dans une liste de révision lorsque vous affichez plusieurs twigs exécutant une autre. La relation “x is-a-parent of y” est toujours respectée, même si l’horodatage de votre committer / auteur se situe dans le passé ou le futur.
Vous auriez besoin de quelque chose comme git log --pretty="format:%at %H" | sort -g
git log --pretty="format:%at %H" | sort -g
, puis renvoyer les hachages dans git log
.
En se fondant sur ce que jørgensen a suggéré, il existe une solution “à une seule ligne” qui peut vous donner ce que vous recherchez. Formaté ici pour faciliter la visualisation. 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