Question

Y at-il un moyen de déterminer lorsque une branche Git a été créée? J'ai une branche dans mon repo et je ne me rappelle pas la création et la pensée peut-être voir l'horodatage de création serait faire du jogging ma mémoire.

Était-ce utile?

La solution

Utilisez

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

Si vous préférez voir dans son contexte en utilisant gitk, puis utilisez

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

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

Capture d'écran

Autres conseils

ponted dans le commentaires et réponse de Jackub, aussi longtemps que votre branche est plus jeune que le nombre de jours fixé dans la configuration paramètre gc.reflogexpire (la valeur par défaut est de 90 jours), alors vous pouvez utiliser votre reflog pour savoir quand une référence de la branche a été créée.

Notez que git reflog peut prendre plus git log drapeaux . De plus, notez que les sélecteurs de style HEAD@{0} sont effectivement des notions de temps et, en fait, sont traitées (dans une sorte de chemin piraté) comme des chaînes de date. Cela signifie que vous pouvez utiliser le --date=local drapeau et obtenir une 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 parfois 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 note: le drapeau --all (qui est vraiment un drapeau git-log compris par git-reflog) affiche les reflogs pour tous les refs connus dans 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

Pro Git § 3.1 Git Branching - Quelle 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] engager.

Comme une branche est juste un pointeur léger, git n'a aucune notion explicite de son histoire ou la date de création. « Mais attendez, » je vous entends dire, « de git cours connaît mon histoire de branche! » Eh bien, en quelque sorte.

Si vous exécutez 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 est vraiment une liste de commits accessible à partir de « succursale » qui ne sont pas accessibles à partir du maître. Cela vous donne les informations que vous voulez, mais si et seulement si vous avez jamais fusionné « succursale » de retour au maître, et n'ont jamais fusionné maître dans « branche » depuis que vous avez créé. Si vous Vous fusionnées, cette histoire des différences s'effondrer.

Heureusement, le reflog contient souvent les informations que vous voulez, comme cela est 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 point où vous avez créé la branche.

Si la branche a été supprimé puis « branche » n'est plus un identifiant valide git, mais vous pouvez l'utiliser à la place, qui peut 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 reflog ne fonctionne pas efficacement sur les branches éloignées, seuls que vous avez travaillé sur place.

Tout d'abord, si vous branche a été créée dans les jours gc.reflogexpire (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 filiale, combien il y a des opérations, et dont la branche (bien, il pourrait être juste « Créé HEAD », ce qui ne nous aide pas beaucoup).

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


En second lieu, si vous avez branche plus longtemps que gc.reflogexpire et vous avez exécuté git gc (ou il a été exécuté automatiquement), vous devez trouver ancêtre commun avec la branche sur laquelle elle a été créée à partir. Jetez un oeil à fichier de configuration, peut-être il y a l'entrée de branch.<branchname>.merge, qui vous dira quelle branche celui-ci est basée sur.

Si vous savez que la branche en question a été créée hors branche principale (bifurquer de branche maître), 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.

Voici ce que dit gbacon dans sa réponse .

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

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

Mes fichiers semblent avoir un horodatage unix en eux.

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

git log -g

Vous pouvez suivre ce journal aussi bien, à quand vous avez créé la branche. git log montre la date de l'engagement, cependant, pas la date à laquelle vous avez fait l'action qui a fait une entrée dans le reflog. Je ne l'ai pas trouvé que encore, sauf en regardant dans la reflog réelle dans le chemin ci-dessus.

Essayer cette

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

Utilisation:

git reflog

pour montrer tout le cycle de vie de votre dépôt dans le dossier en cours. Le nom de la branche qui apparaissent d'abord (de bas en haut) est la source qui a été créé.

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éée (la caisse -b) du maître

  • Direction fonction-jira35 est créé (checkout -b) du développement

  • Direction fonctionnalités JIRA-SUT-46 est créé (checkout -b) du développement

est quelque chose que je suis venu avec 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:'

Cette commande montre 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
( https://stackoverflow.com/a/14265207/1929406 )

Combiné avec la réponse d'Andrew Sohn

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top