Как определить, когда была создана ветка Git?



есть ли способ определить , когда была создана ветка Git? У меня есть ветка в моем РЕПО, и я не помню, как ее создал, и подумал, что, возможно, увидев временную метку создания, моя память пробудится.

1283   8  

8 ответов:

использовать

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

Если вы предпочитаете видеть его в контексте, то используйте

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

(где foo-это название ветки, которую вы ищете.)

Screenshot

как ponted вне в комментариях и ответ Джекуба, пока ваша ветка моложе, чем количество дней, установленных в настройках конфигурации gc.reflogexpire (по умолчанию-90 дней), то вы можете использовать reflog, чтобы узнать, когда был создан первый филиал-ссылка.

отметим, что git reflog может git log флаги. Далее отметим, что HEAD@{0} селекторы стиля эффективно понятия времени и, в факт, обрабатываются (в взломанном виде) как строки даты. Это означает, что вы можете использовать флаг --date=local и получить выходной вроде этого:

$ 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

это также может быть полезно время от времени использовать --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

последнее примечание:--all флаг (который на самом деле является флагом git-log, понимаемым git-reflog) покажет reflogs для всех известных ссылок в refs/ (вместо того, чтобы просто HEAD) который покажет Вам события ветви ясно:

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

во-первых, если вы ветвь была создана в пределах gc.reflogexpire дней (по умолчанию 90 дней, т. е. около 3 месяцев), вы можете использовать git log -g <branch> или git reflog show <branch> чтобы найти первую запись в reflog, которая будет событием создания, и выглядит примерно так, как показано ниже (для git log -g):

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

вы получите, кто создал ветку, сколько операций назад и из какой ветки (ну, это может быть просто "создано из головы", что не очень помогает).

что это Миксеп сказал в своем ответ.


во-вторых, если у вас есть филиал дольше, чем gc.reflogexpire и вы побежали git gc (или он был запущен автоматически), вам нужно будет найти общего предка с веткой, из которой он был создан. Взгляните на конфигурационный файл, возможно, есть branch.<branchname>.merge запись, которая расскажет вам, на какой ветке она основана.

если вы знаете, что рассматриваемая ветвь была создана с главной ветви (разветвление от главной ветви), например, вы можете использовать следующая команда, чтобы увидеть общего предка:

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

вы также можете попробовать git show-branch <branch> master, как альтернатива.

это сказал гбакон в своем ответе.

Pro Git § 3.1 ветвление Git-что такое ветвь имеет хорошее объяснение того, что такое ветвь git на самом деле

ветвь в Git-это просто легкий подвижный указатель на фиксацию [a].

поскольку ветвь-это просто легкий указатель, git не имеет явного представления о своей истории или дате создания. - Но погоди, - слышу я твой голос, - конечно, ГИТ знает историю моей ветви!- Ну, вроде того.

если вы запустите любой из следующее:

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

вы увидите, что выглядит как "история вашей ветви", но на самом деле это список коммитов, доступных из "ветви", которые недоступны из master. Это дает вам информацию, которую вы хотите, но если и только если вы никогда не объединяли "ветку" обратно в master и никогда не объединяли master в "ветку" с момента ее создания. Если вы есть слились, тогда эта история различий рухнет.

в reflog часто содержит информацию, которую вы хотите, как описано в различных других ответах здесь. Используйте это:
git reflog --date=local <branch>

показать историю отрасли. Последняя запись в этом списке-это (вероятно) точка, в которой вы создали ветку.

если ветвь была удалена, то "ветвь" больше не является допустимым идентификатором git, но вы можете использовать это вместо этого, что может найти то, что вы хотите:

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

или в оболочке cmd Windows:

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

обратите внимание, что reflog не эффективно работать на удаленных филиалах, только те, которые вы работали на местном уровне.

Я еще не уверен в команде git для этого, но я думаю, что вы можете найти их в reflogs.

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

в моих файлах, похоже, есть временная метка unix.

обновление: появляется возможность использовать reflog истории вместо истории коммитов при печати журналов:

git log -g

вы также можете следить за этим журналом, когда вы создали ветку. git log показывает дату фиксации, хотя, нет даты, когда вы совершили действие, которое сделал запись в reflog. Я не нашел, что еще, кроме как смотреть в реальном reflog выше пути.

использование:

git reflog

чтобы показать весь жизненный цикл вашего репозитория в текущей папке. Имя ветви, которое сначала появляется (от вниз до вверх) является источником, который был создан.

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

это значит:

  • создается разработка филиала (checkout-b) от master

  • функция ветви-jira35 создается (checkout-b) из разработки

  • функция ветви-Jira-sut-46 создается (checkout-b) от разработки

попробуй такое

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

Это то, что я придумал, прежде чем я нашел эту нить.

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:'

Comments

    Ничего не найдено.