Existe-t-il un moyen de déterminer quand une branche Git a été créée? J'ai une branche dans mon référentiel et je ne me souviens pas l'avoir créée et j'ai pensé que peut-être que voir l'horodatage de la création me rafraîchirait la mémoire.
Existe-t-il un moyen de déterminer quand une branche Git a été créée? J'ai une branche dans mon référentiel et je ne me souviens pas l'avoir créée et j'ai pensé que peut-être que voir l'horodatage de la création me rafraîchirait la mémoire.
Réponses:
Utilisation
git show --summary `git merge-base foo master`
Si vous préférez le voir en contexte en utilisant gitk, utilisez
gitk --all --select-commit = `git merge-base foo master`
(où foo est le nom de la branche que vous recherchez.)
Comme indiqué dans les commentaires et dans la 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
(la valeur par défaut est 90 jours), vous pouvez utiliser votre reflog pour savoir quand une référence de branche a été d'abord créé.
Notez que cela git reflog
peut prendre la plupart des git log
drapeaux. Notez en outre que les HEAD@{0}
sélecteurs de style sont effectivement des notions de temps et, en fait, sont traités (d'une 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 celle-ci:
$ git reflog --date = local 763008c HEAD @ {ven 20 août 10:09:18 2010}: tirer: avance rapide f6cec0a HEAD @ {mar 10 août 09:37:55 2010}: tirer: avance rapide e9e70bc HEAD @ {jeu 4 fév 02:51:10 2010}: tirer: avance rapide 836f48c HEAD @ {jeu 21 jan 14:08:14 2010}: paiement: passage de maître à maître 836f48c HEAD @ {jeu 21 jan 14:08:10 2010}: tirer: avance rapide 24bc734 HEAD @ {Wed Jan 20 12:05:45 2010}: paiement: passage de 74fca6a42863ffacaf7ba6f1936a9f228950f657 74fca6a HEAD @ {Wed Jan 20 11:55:43 2010}: paiement: passage du maître à la v2.6.31 24bc734 HEAD @ {Wed Jan 20 11:44:42 2010}: tirer: Avance rapide 964fe08 HEAD @ {lun 26 oct 15:29:29 2009}: paiement: passage de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 4a6908a HEAD @ {lun 26 oct 14:52:12 2009}: paiement: passage du maître à la v2.6.28
Il peut également être utile d'utiliser parfois --date=relative
:
$ git reflog --date = relative 763008c HEAD @ {il y a 4 semaines}: tirer: avance rapide f6cec0a HEAD @ {il y a 6 semaines}: tirer: avance rapide e9e70bc HEAD @ {il y a 8 mois}: tirer: avance rapide 836f48c HEAD @ {il y a 8 mois}: paiement: passage de maître à maître 836f48c HEAD @ {il y a 8 mois}: tirer: avance rapide 24bc734 HEAD @ {il y a 8 mois}: paiement: passage de 74fca6a42863ffacaf7ba6f1936a9f228950f657 à master 74fca6a HEAD @ {il y a 8 mois}: paiement: passage du maître à la v2.6.31 24bc734 HEAD @ {il y a 8 mois}: tirer: avance rapide 964fe08 HEAD @ {il y a 11 mois}: paiement: passage de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 à master 4a6908a HEAD @ {il y a 11 mois}: paiement: passage du maître à la v2.6.28
Une dernière remarque: l' --all
indicateur (qui est vraiment un indicateur git-log compris par git-reflog) affichera les reflogs pour toutes les références connues refs/
(au lieu de simplement HEAD
), ce qui vous montrera clairement les événements de branche:
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: Créé à partir de HEAD
gc.reflogexpire
jours.
Pro Git § 3.1 Git Branching - Ce qu'est une branche a une bonne explication de ce qu'est vraiment 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 attendez," 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'historique de votre branche», mais il s'agit en fait d'une liste de validations accessibles depuis «branch» 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é la «branche» vers le maître et n'avez jamais fusionné le maître dans la «branche» depuis que vous l'avez créée. Si vous avez fusionné, cet historique de différences s'effondrera.
Heureusement, le reflog contient souvent les informations que vous souhaitez, 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 auquel vous avez créé la branche.
Si la branche a été supprimée, 'branch' n'est plus un identifiant git valide, mais vous pouvez l'utiliser à la place, ce 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 fonctionnera pas efficacement sur les branches distantes, uniquement celles sur lesquelles vous avez travaillé localement.
gc.reflogexpire
jours, comme indiqué dans cette réponse et cette réponse .
git reflog --date=local <branch>
Tout d'abord, si votre branche a été créée en quelques 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 dans reflog, qui serait un é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 à partir de quelle branche (enfin, il pourrait s'agir simplement de "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 gc.reflogexpire
et que vous avez exécuté git gc
(ou si elle a été exécutée automatiquement), vous devrez trouver un ancêtre commun avec la branche à partir de laquelle elle a été créée. Jetez un œil au fichier de configuration, il y a peut-être une branch.<branchname>.merge
entrée, qui vous dirait sur quelle branche celle-ci est basée.
Si vous savez que la branche en question a été créée à partir de la branche principale (forking à partir de la branche principale), par exemple, vous pouvez utiliser la commande suivante pour voir l'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 .
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/<yourbranch>
Mes fichiers semblent avoir 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, jusqu'au moment où vous avez créé la branche. git log
affiche la date de la validation, cependant, pas la date à laquelle vous avez effectué l'action qui a fait une entrée dans le reflog. Je ne l'ai pas encore trouvé, sauf en regardant dans le reflog réel dans le chemin ci-dessus.
Essaye ça
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
%
avant(refname)
| cut -c 5- | sort -r |
, puis par le biais de grep pour le mois, me donnant une liste chronologique inversée, plus ou moins.
--sort='-committerdate'
(notez le '-' avant la date de validation pour l'ordre chronologique inverse).
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 la branche est créé (checkout -b) à partir du maître
La fonction de branche-jira35 est créée (checkout -b) à partir du développement
La fonction de branche-jira-sut-46 est créée (checkout -b) à partir du développement
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:'
Cette commande affiche la date de création de la branche à dev
partir demain
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
Si vous souhaitez obtenir les détails de toutes les succursales
for i in `git branch -r | tail -n +2 `;do git log --reverse $i|grep -A 2 -B 2 `echo $i | awk -F'origin/' '{print $2}'` |head -n 4; done
J'ai trouvé le meilleur moyen: je vérifie toujours la dernière branche créée de cette façon
git for-each-ref --sort=-committerdate refs/heads/
Combiné avec la réponse d'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
Cela a fait pour moi: (10 ans plus tard)
git log [--remotes] --no-walk --decorate
Puisqu'il n'y a aucune information stockée sur les heures de création de branche, cela affiche la première validation de chaque branche ( --no-walk
), qui inclut la date de la validation. Utilisation--remotes
pour les succursales distantes ou omettez-le pour les succursales locales.
Comme je fais au moins un commit dans une branche avant d'en créer un autre, cela m'a permis de remonter quelques mois de créations de branche (et de dev-start) à des fins de documentation.
source: AnoE sur stackexchange