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

y a-t-il un moyen de déterminer quand une branche Git a été créée? J'ai une branche dans mon dossier et je ne me souviens pas l'avoir créée et j'ai pensé que peut-être voir le horodatage de la création me rafraîchirait la mémoire.

228
demandé sur paxos1977 2010-02-13 01:02:39

8 réponses

Utiliser

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

si vous préférez le voir en contexte, alors utilisez

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

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

Screenshot

112
répondu Greg Bacon 2018-07-26 02:56:38

As ponted out in the comments and in Jacqu's answer , aussi longtemps que votre branche est plus jeune que le nombre de jours défini dans le paramètre de configuration gc.reflogexpire (la valeur par défaut est de 90 jours), alors vous pouvez utiliser votre reclog pour savoir quand une référence de branche a été créée pour la première fois.

notez que git reflog peut prendre le plus git log drapeaux. Notons en outre que les sélecteurs de style HEAD@{0} sont effectivement des notions de temps et, en fait, sont manipulés (d'une façon ou d'une autre) comme des chaînes de date. Cela signifie que vous pouvez utiliser le drapeau --date=local et obtenir la sortie comme ceci:

$ git reflog --date=local
763008c HEAD@{Fri Aug 20 10:09:18 2010}: pull : Fast-forward
f6cec0a HEAD@{Tue Aug 10 09:37:55 2010}: pull : Fast-forward
e9e70bc HEAD@{Thu Feb 4 02:51:10 2010}: pull : Fast forward
836f48c HEAD@{Thu Jan 21 14:08:14 2010}: checkout: moving from master to master
836f48c HEAD@{Thu Jan 21 14:08:10 2010}: pull : Fast forward
24bc734 HEAD@{Wed Jan 20 12:05:45 2010}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 
74fca6a HEAD@{Wed Jan 20 11:55:43 2010}: checkout: moving from master to v2.6.31
24bc734 HEAD@{Wed Jan 20 11:44:42 2010}: pull : Fast forward
964fe08 HEAD@{Mon Oct 26 15:29:29 2009}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 
4a6908a HEAD@{Mon Oct 26 14:52:12 2009}: checkout: moving from master to v2.6.28

il peut également être utile à certains moments d'utiliser --date=relative :

$ git reflog --date=relative
763008c HEAD@{4 weeks ago}: pull : Fast-forward
f6cec0a HEAD@{6 weeks ago}: pull : Fast-forward
e9e70bc HEAD@{8 months ago}: pull : Fast forward
836f48c HEAD@{8 months ago}: checkout: moving from master to master
836f48c HEAD@{8 months ago}: pull : Fast forward
24bc734 HEAD@{8 months ago}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 to master
74fca6a HEAD@{8 months ago}: checkout: moving from master to v2.6.31
24bc734 HEAD@{8 months ago}: pull : Fast forward
964fe08 HEAD@{11 months ago}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 to master
4a6908a HEAD@{11 months ago}: checkout: moving from master to v2.6.28

une dernière remarque: le drapeau --all (qui est en fait un git-log flag compris par git-refrog) affichera les reflogs pour tous les ref connus en refs/ (au lieu de simplement, HEAD ) qui vous montrera les événements de branche clairement:

git reflog --date=local --all
860e4e4 refs/heads/master@{Sun Sep 19 23:00:30 2010}: commit: Second.
17695bc refs/heads/example_branch@{Mon Sep 20 00:31:06 2010}: branch: Created from HEAD
101
répondu Aaron 2017-05-23 11:54:44

tout D'abord, si votre branche a été créée dans les gc.reflogexpire jours (par défaut 90 jours, soit environ 3 mois), vous pouvez utiliser git log -g <branch> ou git reflog show <branch> pour trouver la première entrée dans reflog, qui serait l'événement de création, et ressemble à quelque chose comme ci-dessous (pour git log -g ):

Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>

vous obtiendriez qui a créé une branche, combien d'opérations il y a, et de quelle branche (bien, il pourrait être juste" créé à partir de la tête", ce qui n'aide pas beaucoup).

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


deuxièmement, si vous avez une branche plus longue que gc.reflogexpire et que vous avez exécuté git gc (ou qu'elle a été exécutée automatiquement), vous devez trouver un ancêtre commun avec la branche d'où elle a été créée. Jetez un coup d'oeil au fichier de configuration, peut-être qu'il y a une entrée branch.<branchname>.merge , qui vous indiquerait sur quelle branche celle-ci est basée.

si vous savez que le branche en question a été créé hors branche principale (bifurcation de branche principale), par exemple, vous pouvez utiliser la commande suivante pour voir ancêtre commun:

git show $(git merge-base <branch> master)

vous pouvez également essayer git show-branch <branch> master , comme alternative.

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

35
répondu Jakub Narębski 2017-05-23 12:18:11

Pro Git § 3.1 Git Ramification - Ce qu'une Branche Est a une bonne explication de ce qu'est une branche git est vraiment

une branche dans Git est simplement un pointeur mobile léger à [A] commettre.

comme une branche n'est qu'un pointeur léger, git n'a pas de notion explicite de son histoire ou de sa date de création. "Mais accrochez-vous", je vous entends dire, "bien sûr git connaît mon histoire de branche!"Eh bien, en quelque sorte.

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

git log <branch> --not master
gitk <branch> --not master

vous verrez ce qui ressemble à" l'histoire de votre branche", mais c'est vraiment une liste de commits accessibles depuis 'la branche' qui ne sont pas accessibles depuis le maître. Cela vous donne l'information que vous voulez, mais si et seulement si vous n'avez jamais fusionné "succursale" de retour à maîtriser, et n'ont jamais fusionné master en "branche" depuis que vous l'avez créé. Si vous avez fusionné, alors cette histoire de les différences s'effondreront.

heureusement le reflog contient souvent l'information que vous voulez, comme expliqué dans diverses autres réponses ici. Utilisez ceci:

git reflog --date=local <branch>

pour montrer l'histoire de la branche. La dernière entrée dans cette liste est (probablement) le moment où vous avez créé la succursale.

si la branche a été supprimée, alors 'branch' n'est plus un identifiant git VALIDE, mais vous pouvez l'utiliser à la place, qui peut trouver ce que vous want:

git reflog --date=local | grep <branch>

ou dans un shell cmd Windows:

git reflog --date=local | find "<branch>"

notez que reflog ne fonctionnera pas efficacement sur les branches distantes, seulement celles sur lesquelles vous avez travaillé localement.

32
répondu yoyo 2014-07-24 18:46:33

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

.git/logs/refs/heads/<yourbranch>

Mes fichiers semblent avoir un timestamp unix.

mise à Jour: Il semble y avoir une option pour utiliser le reflog l'histoire au lieu de la validation de l'histoire lors de l'impression de journaux:

git log -g

, Vous pouvez suivre ce journal ainsi, lorsque vous avez créé le direction. git log montre la date de la propagation, cependant, pas la date où vous avez fait l'action qui a fait une entrée dans le reflog. Je n'ai pas encore trouvé cela, sauf en regardant dans le carnet de notes dans le chemin ci-dessus.

14
répondu MikeSep 2010-02-12 22:42:46

utiliser:

git reflog

pour afficher tout le cycle de vie de votre dépôt dans le dossier courant. Le nom de la branche qui apparaît en premier (de bas en haut) est la source qui a été 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

ça veut dire:

  • création D'une succursale (CAISSE-b) à partir du maître

  • "
  • fonction de branche-jira35 est créé (checkout-b) à partir de développement

  • fonction de branche-jira-sut-46 est créé (checkout-b) à partir du développement

6
répondu De Nguyen 2015-01-29 10:03:16

Essayez cette

  git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
3
répondu Sireesh Yarlagadda 2016-11-28 14:09:47

C'est quelque chose que j'ai inventé 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:'
2
répondu Andrew Sohn 2013-01-10 18:53:04