it-swarm.com.ru

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

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

267
paxos1977

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

git show - резюме `git merge-base foo master`

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

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

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

Screenshot

127
Greg Bacon

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

Обратите внимание, что git reflog может принимать большинство git log флагов. Также отметим, что селекторы стиля [email protected]{0} - это, по сути, понятия времени и, фактически, они обрабатываются (взломанным способом) как строки даты. Это означает, что вы можете использовать флаг --date=local и получить вывод примерно так:

$ git reflog --date = local 
 763008c HEAD @ {Пт 20 августа 10:09:18 2010}: pull: Перемотка вперед 
 f6cec0a HEAD @ {Вт 10 августа 09:37:55 2010}: pull: перемотка вперед 
 E9e70bc HEAD @ {Четверг, 4 февраля 02:51:10 2010}: pull: перемотка вперед 
 836f48c HEAD @ {чт 21 января 14:08:14 2010 }: checkout: переход от мастера к мастеру 
 836f48c HEAD @ {Чт 21 января 14:08:10 2010}: pull: Перемотка вперед 
 24bc734 HEAD @ {Ср 20 января 12:05:45 2010}: оформление заказа: переход от 74fca6a42863ffacaf7ba6f1936a9f228950f657 
 74fca6a HEAD @ {ср 20 января 11:55:43 2010}: оформление заказа: переход от мастера к v2.6.31 
 24bc734 HEAD @ {ср 20 января 11 : 44: 42 2010}: pull: ускоренная перемотка вперед 
 964fe08 HEAD @ {Пн 26 октября 15:29:29 2009}: оформление заказа: переход от 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 
 4a6908a HEAD @ {Пн 26 октября 14: 52:12 2009}: checkout: переход от мастера к v2.6.28 

Иногда может быть полезно использовать --date=relative:

$ git reflog --date = относительный 
 763008c HEAD @ {4 недели назад}: pull: перемотка вперед 
 f6cec0a HEAD @ {6 недель назад}: pull: перемотка вперед 
 e9e70bc HEAD @ {8 месяцев назад}: тянуть: перемотать вперед 
 836f48c HEAD @ {8 месяцев назад}: оформить заказ: переход от мастера к мастеру 
 836f48c HEAD @ {8 месяцев назад}: тянуть : Ускоренная перемотка вперед 
 24bc734 HEAD @ {8 месяцев назад}: оформление заказа: переход от 74fca6a42863ffacaf7ba6f1936a9f228950f657 к мастеру 
 74fca6a HEAD @ {8 месяцев назад}: проверка: переход от мастера к v2.6.31 
 24bc734 HEAD @ {8 месяцев назад}: тянуть: Перемотать вперед 
 964fe08 HEAD @ {11 месяцев назад}: оформить заказ: перейти от 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 к мастеру 
 4a6908a HEAD @ {11 месяцев назад}: Оформить заказ: переход от мастера к v2.6.28 

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

git reflog --date = local --all 
 860e4e4 refs /heads/master @ {Вс 19 сентября 23:00:30 2010}: commit: Second. 
 17695bc refs /heads/example_branch @ {Понедельник, 20 сентября 00:31:06 2010}: отрасль: Создано из HEAD 
114
Aaron

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

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

Поскольку ветвь является просто легким указателем, git не имеет явного представления о своей истории или дате создания. "Но держись," я слышу, как ты говоришь, "конечно, мерзавец знает историю моей ветки!" Ну вроде.

Если вы выполните одно из следующих действий:

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

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

К счастью, рефлог часто содержит информацию, которую вы хотите, как объяснено в различных других ответах здесь. Использовать этот:

git reflog --date=local <branch>

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

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

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

Или в командной оболочке Windows:

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

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

44
yoyo

Во-первых, если ваша ветка была создана в течение 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>

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

Вот что MikeSep сказал в своем ответе .


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

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

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

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

Вот что Габон сказал в своем ответе .

38
Jakub Narębski

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

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

У моих файлов есть метка времени Unix.

Обновление: Похоже, есть возможность использовать историю рефлогов вместо истории фиксации при печати журналов:

git log -g

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

16
Mike Seplowitz

Попробуй это

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

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

git reflog

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

855a3ce [email protected]{0}: checkout: moving from development to feature-sut-46
855a3ce [email protected]{1}: checkout: moving from feature-sut-46 to development
855a3ce [email protected]{2}: checkout: moving from feature-jira35 to feature-sut-46
535dd9d [email protected]{3}: checkout: moving from feature-sut-46 to feature-jira35
855a3ce [email protected]{4}: checkout: moving from development to feature-sut-46
855a3ce [email protected]{5}: checkout: moving from feature-jira35 to development
535dd9d [email protected]{6}: commit: insert the format for vendor specific brower - screen.css
855a3ce [email protected]{7}: checkout: moving from development to feature-jira35
855a3ce [email protected]{8}: checkout: moving from master to development

Это значит:

  • Создание ветки создано (оформить заказ -b) из мастера

  • Ветка feature-jira35 создана (оформить заказ -b) из разработки

  • Ветвь feature-jira-sut-46 создана (извлечение -b) из разработки

7
De Nguyen

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

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:'
3
Andrew Sohn

Эта команда показывает дату создания ветви dev из main

$git reflog show --date=iso dev
$7a2b33d [email protected]{2012-11-23 13:20:28 -2100}: branch: Created from main
2
Sazzad Hissain Khan