Как определить, когда была создана ветка 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.
- Перейдите на вкладку Insights.
- Выберите вкладку Сеть на боковой панели.
Эта команда показывает дату создания ветки 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. .
выход: