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

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

Ответ 1

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

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

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

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

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

Screenshot

Ответ 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