web-dev-qa-db-fra.com

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

Existe-t-il un moyen de déterminer quand une branche Git a été créée? J'ai une succursale dans mon référentiel et je ne me souviens pas de l'avoir créée.

281
paxos1977

Utilisation

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

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

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

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

Screenshot

133
Greg Bacon

Comme tronqué dans les commentaires et réponse de Jackub , tant que votre branche est plus jeune que le nombre de jours défini dans le paramètre de configuration _gc.reflogexpire_ (valeur par défaut). est de 90 jours), vous pouvez utiliser votre compte de rappel pour savoir quand une référence de branche a été créée.

Notez que git reflog peut utiliser la plupart des git log . Notez en outre que les sélecteurs de style _HEAD@{0}_ sont en réalité 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 l'indicateur _--date=local_ et obtenir une sortie comme ceci:

$ git reflog --date = local 
 763008c HEAD @ {ven 20 août 10:09:18 2010}: tirer: avance rapide 
 f6cec0a HEAD @ {mardi 10 août 09:37:55 2010}: tirer: avance rapide 
 E9e70bc HEAD @ {jeu 4 février 02:51:10 2010}: tirer: avance rapide 
 836f48c HEAD @ {jeu. 21 janvier 14:08:14 2010 }: checkout: passage de maître à maître 
 836f48c HEAD @ {jeudi 21 janvier à 14:08:10 2010}: tirer: avance rapide 
 24bc734 HEAD @ {mer 20 janvier à 12:05:45 2010}: départ: passage de 74fca6a42863ffacaf7ba6f1936a9f228950f657 
 74fca6a HEAD @ {mercredi 20 janvier 2011:55:43}: départ: passage du maître à la v2.6.31 
 24bc734 HEAD @ {mercredi 20 janvier : 44: 42 2010}: tirez: avancez rapidement. 
 964fe08 HEAD @ {lun 26 oct. 15:29:29 2009}: départ: de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 
 4a6908a HEAD @ {lun 26 oct.: 52:12 2009}: checkout: passer de la version principale à la v2.6.28 

Il peut également être utile d’utiliser parfois _--date=relative_:

$ git reflog --date = relatif 
 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}: caisse: passage de maître à maître 
 836f48c HEAD @ {il y a 8 mois}: tirer : Avance rapide 
 24bc734 HEAD @ {il y a 8 mois}: caisse: passer de 74fca6a42863ffacaf7ba6f1936a9f228950f657 à maîtriser 
 74fca6a HEAD @ {8 mois auparavant}: caisse: passer de maître à v2.6.31 
 24bc734 HEAD @ {il y a 8 mois}: tirer: Avance rapide 
 964fe08 HEAD @ {il y a 11 mois}: commander: passer de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 à maître 
 4a6908a HEAD @: 11a checkout: passer de master à v2.6.28 

Une dernière remarque: le drapeau _--all_ (qui est en réalité un drapeau git-log compris par git-reflog) affichera les reflogs de toutes les références connues dans _refs/_ (au lieu de simplement, HEAD ) qui vous montrera clairement les événements de la branche:

git reflog --date = local --all 
 860e4e4 refs/heads/master @ {dimanche 19 sept. 23:00:30 2010}: commit: Deuxième. 
 17695bc refs/heads/example_branch @ {Mon Sep 20 00:31:06 2010}: branche: Créé à partir de HEAD 
114
Aaron

Pro Git § 3.1 Git Branching - Qu'est-ce qu'une branche? a une bonne explication de ce qu'est réellement une branche git

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

Puisqu'une branche est juste un pointeur léger, git n'a aucune notion explicite de son historique ou de sa date de création. "Mais accrochez-vous", je vous entends dire, "bien sûr, il connaît l'histoire de ma 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'historique de votre branche", mais il s'agit en réalité d'une liste de commits accessibles depuis "branche" et non accessibles depuis maître. Cela vous donne les informations souhaitées, mais seulement si vous n'avez jamais fusionné "branche" vers maître, et n'avez jamais fusionné maître dans "branche" depuis sa création. Si vous avez fusionné, l'historique des différences s'effondrera.

Heureusement, le bulletin contient souvent les informations souhaitées, 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 de cette liste est (probablement) le point où vous avez créé la branche.

Si la branche a été supprimée, 'branche' n'est plus un identifiant git valide, mais vous pouvez l'utiliser à la place, ce qui peut vous permettre de trouver ce que vous voulez:

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

Ou dans un shell cmd Windows:

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

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

46
yoyo

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

Reflog: <branch>@{<nn>} (C R Eator <[email protected]>)
Reflog message: branch: Created from <some other branch>

Vous obtiendrez qui a créé une branche, combien d'opérations il y a et quelle branche (enfin, cela pourrait simplement être "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 branche depuis plus longtemps que gc.reflogexpire et que vous avez exécuté git gc (ou s'il a été exécuté automatiquement), vous devrez rechercher un ancêtre commun avec la branche à partir de laquelle il a été créé. Regardez le fichier de configuration, il y a peut-être l'entrée branch.<branchname>.merge, qui vous dirait sur quelle branche celle-ci est basée.

Si vous savez que la branche en question a été créée hors d'une branche principale (forque depuis une branche principale), par exemple, vous pouvez utiliser la commande suivante pour afficher l'ancêtre commun:

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

Vous pouvez également essayer git show-branch <branch> master, au lieu de cela.

C'est ce que Gbacon a déclaré dans sa réponse .

38
Jakub Narębski

Je ne suis pas sûr de la commande git pour cela, 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 exister une option permettant d'utiliser l'historique du reflog à la place de l'historique de validation lors de l'impression des journaux:

git log -g

Vous pouvez également suivre ce journal depuis la création de la branche. git log affiche la date de validation, mais pas la date à laquelle vous avez effectué l'action qui a fait une entrée dans le reflog. Je n'ai pas encore trouvé cela, sauf en regardant dans le reflet du chemin ci-dessus.

18
Mike Seplowitz

Utilisation:

git reflog

pour afficher tout le cycle de vie de votre référentiel dans le dossier actuel. 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

Cela signifie:

  • Le développement de branche est créé (caisse -b) à partir du maître

  • L'entité branche-jira35 est créée (caisse -b) à partir du développement

  • L'entité branche-jira-sut-46 est créée (achat -b) à partir du développement

8
De Nguyen

Essaye ça

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

C’est quelque chose que j’ai imaginé 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:'
4
Andrew Sohn

Cette commande affiche la date de création de la branche dev de main

$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
2

Combiné avec la réponse de Andrew Sohn ( https://stackoverflow.com/a/14265207/1929406 )

branchcreated=$(git reflog show --date=format:'%Y-%m-%d %H:%M:%S' --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1| cut -d'{' -f 2| cut -d'}' -f 1 | xargs)
echo $branchcreated
0
kivagant