Comment déterminer quand une twig Git a été créée?

Y a-t-il un moyen de déterminer quand une succursale Git a été créée? J’ai une twig dans mon repo et je ne me souviens pas de l’avoir créée et j’ai pensé que voir l’horodatage de la création me ferait plaisir.

Utilisation

  git show --summary `git merge-base foo master` 

Si vous préférez le voir en contexte, utilisez

  gitk --all --select-commit = `git merge-base foo master` 

(où foo est le nom de la twig que vous recherchez)

Capture d'écran

Comme indiqué dans les commentaires et dans la réponse de Jackub , tant que votre twig est plus jeune que le nombre de jours défini dans le paramètre de configuration gc.reflogexpire (la valeur par défaut est 90 jours), vous pouvez utiliser votre renvoi pour savoir quand la référence de twig a été créée pour la première fois.

Notez que git reflog peut prendre la plupart git log drapeaux git log . Notez en outre que les sélecteurs de style HEAD@{0} sont effectivement des notions de temps et, en fait, sont traités (de manière piratée) comme des chaînes de date. Cela signifie que vous pouvez utiliser le drapeau --date=local et obtenir un résultat comme ceci:

  $ git reflog --date = local
 763008c HEAD @ {Ven août 20 10:09:18 2010}: pull: Avance rapide
 f6cec0a HEAD @ {Mar Aug 10 09:37:55 2010}: pull: Avance rapide
 e9e70bc HEAD @ {jeu. févr. 4 02:51:10 2010}: pull: Avance rapide
 836f48c HEAD @ {jeu jan 21 14:08:14 2010}: caisse: passer de maître à maître
 836f48c HEAD @ {jeu jan 21 14:08:10 2010}: pull: Avance rapide
 24bc734 HEAD @ {mer jan 20 12:05:45 2010}: virement: passer de 74fca6a42863ffacaf7ba6f1936a9f228950f657 
 74fca6a HEAD @ {mer jan 20 11:55:43 2010}: checkout: passer de master à v2.6.31
 24bc734 HEAD @ {mer jan 20 11:44:42 2010}: pull: Avance rapide
 964fe08 HEAD @ {Mon Oct 26 15:29:29 2009}: checkout: passer de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 
 4a6908a HEAD @ {Mon Oct 26 14:52:12 2009}: paiement: passer de master à v2.6.28

Il peut aussi être utile parfois d’utiliser --date=relative :

  $ git reflog --date = relative
 763008c HEAD @ {il y a 4 semaines}: pull: Avance rapide
 f6cec0a HEAD @ {il y a 6 semaines}: pull: Avance rapide
 e9e70bc HEAD @ {il y a 8 mois}: pull: Avance rapide
 836f48c HEAD @ {il y a 8 mois}: checkout: passer de master à master
 836f48c HEAD @ {il y a 8 mois}: pull: Avance rapide
 24bc734 HEAD @ {il y a 8 mois}: paiement: passer de 74fca6a42863ffacaf7ba6f1936a9f228950f657 à maître
 74fca6a HEAD @ {il y a 8 mois}: checkout: passer de master à v2.6.31
 24bc734 HEAD @ {il y a 8 mois}: pull: Avance rapide
 964fe08 HEAD @ {il y a 11 mois}: paiement: passer de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 à master
 4a6908a HEAD @ {il y a 11 mois}: checkout: passer de master à v2.6.28

Une dernière remarque: le drapeau --all (qui est vraiment un indicateur de git-log compris par git-reflog) affichera les reflogs pour toutes les références connues dans refs/ (au lieu de simplement HEAD ) qui vous montreront clairement les événements de twig:

  git reflog --date = local --all
 860e4e4 refs / heads / master @ {dim sept. 19 23:00:30 2010}: commit: deuxième.
 17695bc refs / heads / example_branch @ {lun sep 00 00:31:06 2010}: twig: créée à partir de HEAD

Tout d’abord, si vous avez créé une twig dans les jours gc.reflogexpire (90 jours par défaut, soit environ 3 mois), vous pouvez utiliser git log -g ou git reflog show pour trouver la première entrée dans reflog, qui serait événement de création, et ressemble à quelque chose comme ci-dessous (pour git log -g ):

 Reflog: @{} (CR Eator ) Reflog message: branch: Created from  

Vous obtiendrez qui a créé une twig, combien il y a d’opérations et à partir de quelle twig (bon, ça pourrait être juste “Créé à partir de HEAD”, ce qui n’aide pas beaucoup).

C’est ce que MikeSep a dit dans sa réponse .


Deuxièmement, si vous avez une twig plus longue que gc.reflogexpire et que vous avez lancé git gc (ou qu’elle a été exécutée automatiquement), vous devrez trouver un ancêtre commun avec la twig à partir de laquelle il a été créé. Jetez un coup d’oeil au fichier de configuration, il y a peut-être une branch..merge entrée, qui vous dirait sur quelle twig celle-ci est basée.

Par exemple, si vous savez que la twig en question a été créée à partir de la twig principale (à partir de la twig principale), vous pouvez utiliser la commande suivante pour voir l’ancêtre commun:

 git show $(git merge-base  master) 

Vous pouvez également essayer git show-branch master , comme alternative.

C’est ce que dit gbacon dans sa réponse .

Pro Git § 3.1 Git Branching – Qu’est-ce qu’une twig a une bonne explication de ce qu’est réellement une twig git

Une twig dans Git est simplement un pointeur mobile léger sur [a] commit.

Puisqu’une twig est juste un pointeur léger, git n’a aucune notion explicite de son historique ou de sa date de création. “Mais attends,” je vous entends dire, “bien sûr, Git connaît l’histoire de ma twig!” Eh bien, en quelque sorte.

Si vous exécutez l’une des opérations suivantes:

 git log  --not master gitk  --not master 

vous verrez ce qui ressemble à “l’historique de votre twig”, mais c’est vraiment une liste de commits accessibles depuis “twig” qui ne sont pas accessibles depuis master. Cela vous donne les informations que vous voulez, mais si et seulement si vous n’avez jamais fusionné «twig» en maître, et n’avez jamais fusionné le maître en «twig» depuis sa création. Si vous avez fusionné, cet historique de différences va s’effondrer.

Heureusement, le reflog contient souvent les informations souhaitées, comme expliqué dans diverses autres réponses. Utilisez ceci:

 git reflog --date=local  

pour montrer l’histoire de la twig. La dernière entrée de cette liste est (probablement) le point auquel vous avez créé la twig.

Si la twig a été supprimée, alors «twig» n’est plus un identifiant git valide, mais vous pouvez l’utiliser à la place, qui peut trouver ce que vous voulez:

 git reflog --date=local | grep  

Ou dans un shell Windows cmd:

 git reflog --date=local | find "" 

Notez que le reflog ne fonctionnera pas efficacement sur les twigs distantes, uniquement celles sur lesquelles vous avez travaillé localement.

Je ne suis pas encore sûr de la commande git mais je pense que vous pouvez les trouver dans les reflogs.

 .git/logs/refs/heads/ 

Mes fichiers semblent contenir un horodatage Unix.

Mise à jour: Il semble y avoir une option pour utiliser l’historique de reflog au lieu de l’historique de validation lors de l’impression des journaux:

 git log -g 

Vous pouvez également suivre ce journal lorsque vous avez créé la twig. git log montre la date de la validation, cependant, pas la date à laquelle vous avez effectué l’action qui a fait une entrée dans le renvoi. Je n’ai pas encore trouvé cela, sauf en regardant dans le refog dans le chemin ci-dessus.

Utilisation:

 git reflog 

pour afficher tout le cycle de vie de votre référentiel dans le dossier en cours. Le nom de la twig qui apparaît en premier (de bas en haut) est la source créée.

 855a3ce HEAD@{0}: checkout: moving from development to feature-sut-46 855a3ce HEAD@{1}: checkout: moving from feature-sut-46 to development 855a3ce HEAD@{2}: checkout: moving from feature-jira35 to feature-sut-46 535dd9d HEAD@{3}: checkout: moving from feature-sut-46 to feature-jira35 855a3ce HEAD@{4}: checkout: moving from development to feature-sut-46 855a3ce HEAD@{5}: checkout: moving from feature-jira35 to development 535dd9d HEAD@{6}: commit: insert the format for vendor specific brower - screen.css 855a3ce HEAD@{7}: checkout: moving from development to feature-jira35 855a3ce HEAD@{8}: checkout: moving from master to development 

Cela signifie:

  • Le développement de la twig est créé (checkout -b) à partir du master

  • Branch feature-jira35 est créé (checkout -b) à partir du développement

  • Fonctionnalité de twig-jira-sut-46 est créé (checkout -b) du développement

Essaye ça

  git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' 

C’est quelque chose que j’ai trouvé avant de trouver ce fil.

 git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1 git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep 'branch:'