Comment déterminer quand une branche Git a été créé?
-
20-09-2019 - |
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.
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.)
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
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