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

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

17 ответов

Решение

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

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

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

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

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

Скриншот

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

Обратите внимание, что git reflog может взять большинство git log флаги. Далее обратите внимание, что HEAD@{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}: оформление заказа: переход от мастера к мастеру
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}: оформление заказа: переход от мастера к v2.6.28

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

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

Последнее замечание: --all flag (который на самом деле является флагом 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}: branch: Создано из HEAD

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

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

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

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

Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
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, как альтернатива.

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

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

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

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

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

git log -g

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

Попробуй это

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

Это сделало это для меня: (10 лет спустя)

git log [--remotes] --no-walk --decorate

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

Поскольку я делаю по крайней мере одну фиксацию в ветке перед созданием другой, это позволило мне отследить несколько месяцев создания веток (и функцию dev-start) для целей документации.

источник: AnoE на stackexchange

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

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

Это значит:

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

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

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

Я показываю все ответы, и никто не дал ответа с UI. Если кому-то нравится видеть, когда ветка создается через пользовательский интерфейс Github.

  1. Перейдите на вкладку Insights.
  2. Выберите вкладку Сеть на боковой панели.

Вы можете увидеть создание ветки, как показано ниже

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

$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main

Синтаксис : git reflog --date=local | grep checkout: | grep ${current_branch} | tail -1

пример: git reflog --date=local | grep checkout: | grep dev-2.19.0 | tail -1

результат: cc7a3a8ec HEAD@{Wed Apr 29 14:58:50 2020}: checkout: moving from dev-2.18.0 to dev-2.19.0

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

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

Я нашел лучший способ: я всегда проверяю последнюю ветку, созданную таким образом

git for-each-ref --sort=-committerdate refs/heads/

В сочетании с ответом Эндрю Зона ( /questions/33195706/kak-opredelit-kogda-byila-sozdana-vetka-git/33195724#33195724)

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

Если вы хотите получить подробную информацию обо всех филиалах

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

если он просто проверяет SHA1 исходной версии:

( источник )

можно упростить и использоватьgit log --oneline master..fix

очень просто

--- это для GitHub

В адресной строке веб-браузера введите следующий URL-адрес и нажмите клавишу Enter, чтобы получить информацию о репозитории GitHub.

https://api.github.com/repos/{:owner}/{:repository}

Примечание! В приведенном выше URL-адресе замените части {: owner} и {: repository} значениями, которые можно найти в URL-адресе репозитория GitHub, для которого вы хотите знать дату создания. Например, если URL-адрес репозитория https://github.com/ArthurGareginyan/batch-rename/ , то URL-адрес его информации будет https://api.github.com/repos/ArthurGareginyan/batch-rename. .

выход:

Другие вопросы по тегам