Есть ли способ определить , когда была создана ветвь Git? У меня есть филиал в моем репо, и я не помню его создания и думал, возможно, увидев, что временная метка создания заработает мою память.
Как определить, когда была создана ветвь Git?
Ответ 1
использование
git show --summary 'git merge-base foo master'
Если вы хотите увидеть это в контексте, используя gitk, то используйте
gitk --all --select-commit='git merge-base foo master'
(где foo - название ветки, которую вы ищете.)
Ответ 2
Как выложите в комментариях и в ответ Jackub, если ваш филиал моложе количество дней, установленных в настройке конфигурации gc.reflogexpire
(по умолчанию - 90 дней), вы можете использовать свой рефлок, чтобы узнать, когда была создана ссылка на ветку.
Обратите внимание, что git reflog
может принимать больше git log
флаги. Обратите внимание, что селектор стиля [email protected]{0}
- это фактически понятие времени и фактически обрабатывается (в стиле взлома) как строки даты. Это означает, что вы можете использовать флаг --date=local
и получать вывод следующим образом:
$ git reflog --date=local 763008c [email protected]{Fri Aug 20 10:09:18 2010}: pull : Fast-forward f6cec0a [email protected]{Tue Aug 10 09:37:55 2010}: pull : Fast-forward e9e70bc [email protected]{Thu Feb 4 02:51:10 2010}: pull : Fast forward 836f48c [email protected]{Thu Jan 21 14:08:14 2010}: checkout: moving from master to master 836f48c [email protected]{Thu Jan 21 14:08:10 2010}: pull : Fast forward 24bc734 [email protected]{Wed Jan 20 12:05:45 2010}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 74fca6a [email protected]{Wed Jan 20 11:55:43 2010}: checkout: moving from master to v2.6.31 24bc734 [email protected]{Wed Jan 20 11:44:42 2010}: pull : Fast forward 964fe08 [email protected]{Mon Oct 26 15:29:29 2009}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 4a6908a [email protected]{Mon Oct 26 14:52:12 2009}: checkout: moving from master to v2.6.28
Иногда может быть полезно использовать --date=relative
:
$ git reflog --date=relative 763008c [email protected]{4 weeks ago}: pull : Fast-forward f6cec0a [email protected]{6 weeks ago}: pull : Fast-forward e9e70bc [email protected]{8 months ago}: pull : Fast forward 836f48c [email protected]{8 months ago}: checkout: moving from master to master 836f48c [email protected]{8 months ago}: pull : Fast forward 24bc734 [email protected]{8 months ago}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 to master 74fca6a [email protected]{8 months ago}: checkout: moving from master to v2.6.31 24bc734 [email protected]{8 months ago}: pull : Fast forward 964fe08 [email protected]{11 months ago}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 to master 4a6908a [email protected]{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/[email protected]{Sun Sep 19 23:00:30 2010}: commit: Second. 17695bc refs/heads/[email protected]{Mon Sep 20 00:31:06 2010}: branch: Created from HEAD
Ответ 3
Pro Git & sect; 3.1 Git Ветвление - какая ветка имеет хорошее объяснение того, что действительно является ветвью Git
Ветвь в Git является просто легким подвижным указателем на [a] commit.
Поскольку ветка является просто легким указателем, Git не имеет явного представления о ее истории или дате создания. "Но продолжайте," я слышу, что вы говорите ", конечно, Git знает историю моего ветки!" Ну, вроде.
Если вы выполните одно из следующих действий:
git log <branch> --not master
gitk <branch> --not master
вы увидите, что похоже на "историю вашей ветки", но на самом деле это список коммитов, доступных из "ветки", недоступных для мастера. Это дает вам необходимую информацию, но если и только если вы никогда не сливали "ветку" назад к мастеру и никогда не сливали мастера в "ветку" с момента создания. Если вы слились, тогда эта история различий рухнет.
К счастью, reflog часто содержит информацию, которую вы хотите, как объясняется в других других ответах здесь. Используйте это:
git reflog --date=local <branch>
чтобы показать историю ветки. Последняя запись в этом списке - это (возможно) точка, в которой вы создали ветвь.
Если ветвь удалена, то "ветка" больше не является допустимым идентификатором Git, но вы можете использовать это вместо этого, которое может найти то, что вы хотите:
git reflog --date=local | grep <branch>
Или в командной оболочке Windows:
git reflog --date=local | find "<branch>"
Обратите внимание, что reflog не будет работать эффективно на удаленных ветвях, только те, с которыми вы работали локально.
Ответ 4
Во-первых, если ветка была создана в течение gc.reflogexpire
дней (по умолчанию 90 дней, т.е. около 3 месяцев), вы можете использовать git log -g <branch>
или git reflog show <branch>
, чтобы найти первую запись в журнале, которая будет событием создания, и выглядит как ниже (для git log -g
):
Reflog: <branch>@{<nn>} (C R Eator <[email protected]ample.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
в качестве альтернативы.
Вот что сказал gbacon в своем ответе.
Ответ 5
Я еще не уверен в команде git, но думаю, вы можете найти их в блоках.
.git/logs/refs/heads/<yourbranch>
В моих файлах есть временная метка unix.
Обновление:. При печати журналов появляется возможность использовать историю reflog вместо истории фиксации:
git log -g
Вы также можете следить за этим журналом, когда вы создали ветку. git log
показывает дату фиксации, но не дату, когда вы сделали действие, которое сделало запись в рефлоге. Я еще не нашел этого, кроме как просмотрев фактический рефлог на пути выше.
Ответ 6
Попробуйте это
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
Ответ 7
Использование:
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
Это означает:
-
Создается разработка ветвей (check -b) от мастера
-
Функция разработки-jira35 создается (check -b) из разработки
-
Функция создания-jira-sut-46 создается (check -b) из разработки
Ответ 8
Это то, что я придумал, прежде чем нашел этот поток.
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:'
Ответ 9
Эта команда показывает дату создания ветки dev
от main
$git reflog show --date=iso dev
$7a2b33d [email protected]{2012-11-23 13:20:28 -2100}: branch: Created from main
Ответ 10
В сочетании с ответом Эндрю Сона (fooobar.com/info/33103/...)
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