8 ответов:
использовать
git show --summary `git merge-base foo master`Если вы предпочитаете видеть его в контексте, то используйте
gitk --all --select-commit=`git merge-base foo master`(где foo-это название ветки, которую вы ищете.)
как ponted вне в комментариях и ответ Джекуба, пока ваша ветка моложе, чем количество дней, установленных в настройках конфигурации
gc.reflogexpire(по умолчанию-90 дней), то вы можете использовать reflog, чтобы узнать, когда был создан первый филиал-ссылка.отметим, что
git reflogможетgit logфлаги. Далее отметим, чтоHEAD@{0}селекторы стиля эффективно понятия времени и, в факт, обрабатываются (в взломанном виде) как строки даты. Это означает, что вы можете использовать флаг--date=localи получить выходной вроде этого:$ git reflog --date=local 763008c HEAD@{Fri Aug 20 10:09:18 2010}: pull : Fast-forward f6cec0a HEAD@{Tue Aug 10 09:37:55 2010}: pull : Fast-forward e9e70bc HEAD@{Thu Feb 4 02:51:10 2010}: pull : Fast forward 836f48c HEAD@{Thu Jan 21 14:08:14 2010}: checkout: moving from master to master 836f48c HEAD@{Thu Jan 21 14:08:10 2010}: pull : Fast forward 24bc734 HEAD@{Wed Jan 20 12:05:45 2010}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 74fca6a HEAD@{Wed Jan 20 11:55:43 2010}: checkout: moving from master to v2.6.31 24bc734 HEAD@{Wed Jan 20 11:44:42 2010}: pull : Fast forward 964fe08 HEAD@{Mon Oct 26 15:29:29 2009}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 4a6908a HEAD@{Mon Oct 26 14:52:12 2009}: checkout: moving from master to v2.6.28это также может быть полезно время от времени использовать
--date=relative:$ git reflog --date=relative 763008c HEAD@{4 weeks ago}: pull : Fast-forward f6cec0a HEAD@{6 weeks ago}: pull : Fast-forward e9e70bc HEAD@{8 months ago}: pull : Fast forward 836f48c HEAD@{8 months ago}: checkout: moving from master to master 836f48c HEAD@{8 months ago}: pull : Fast forward 24bc734 HEAD@{8 months ago}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 to master 74fca6a HEAD@{8 months ago}: checkout: moving from master to v2.6.31 24bc734 HEAD@{8 months ago}: pull : Fast forward 964fe08 HEAD@{11 months ago}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 to master 4a6908a HEAD@{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/master@{Sun Sep 19 23:00:30 2010}: commit: Second. 17695bc refs/heads/example_branch@{Mon Sep 20 00:31:06 2010}: branch: Created from HEAD
во-первых, если вы ветвь была создана в пределах
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>вы получите, кто создал ветку, сколько операций назад и из какой ветки (ну, это может быть просто "создано из головы", что не очень помогает).
что это Миксеп сказал в своем ответ.
во-вторых, если у вас есть филиал дольше, чем
gc.reflogexpireи вы побежалиgit gc(или он был запущен автоматически), вам нужно будет найти общего предка с веткой, из которой он был создан. Взгляните на конфигурационный файл, возможно, естьbranch.<branchname>.mergeзапись, которая расскажет вам, на какой ветке она основана.если вы знаете, что рассматриваемая ветвь была создана с главной ветви (разветвление от главной ветви), например, вы можете использовать следующая команда, чтобы увидеть общего предка:
git show $(git merge-base <branch> master)вы также можете попробовать
git show-branch <branch> master, как альтернатива.
Pro Git § 3.1 ветвление Git-что такое ветвь имеет хорошее объяснение того, что такое ветвь git на самом деле
ветвь в Git-это просто легкий подвижный указатель на фиксацию [a].
поскольку ветвь-это просто легкий указатель, git не имеет явного представления о своей истории или дате создания. - Но погоди, - слышу я твой голос, - конечно, ГИТ знает историю моей ветви!- Ну, вроде того.
если вы запустите любой из следующее:
git log <branch> --not master gitk <branch> --not masterвы увидите, что выглядит как "история вашей ветви", но на самом деле это список коммитов, доступных из "ветви", которые недоступны из master. Это дает вам информацию, которую вы хотите, но если и только если вы никогда не объединяли "ветку" обратно в master и никогда не объединяли master в "ветку" с момента ее создания. Если вы есть слились, тогда эта история различий рухнет.
в reflog часто содержит информацию, которую вы хотите, как описано в различных других ответах здесь. Используйте это:git reflog --date=local <branch>показать историю отрасли. Последняя запись в этом списке-это (вероятно) точка, в которой вы создали ветку.
если ветвь была удалена, то "ветвь" больше не является допустимым идентификатором git, но вы можете использовать это вместо этого, что может найти то, что вы хотите:
git reflog --date=local | grep <branch>или в оболочке cmd Windows:
git reflog --date=local | find "<branch>"обратите внимание, что reflog не эффективно работать на удаленных филиалах, только те, которые вы работали на местном уровне.
Я еще не уверен в команде git для этого, но я думаю, что вы можете найти их в reflogs.
.git/logs/refs/heads/<yourbranch>в моих файлах, похоже, есть временная метка unix.
обновление: появляется возможность использовать reflog истории вместо истории коммитов при печати журналов:
git log -gвы также можете следить за этим журналом, когда вы создали ветку.
git logпоказывает дату фиксации, хотя, нет даты, когда вы совершили действие, которое сделал запись в reflog. Я не нашел, что еще, кроме как смотреть в реальном reflog выше пути.
использование:
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это значит:
создается разработка филиала (checkout-b) от master
функция ветви-jira35 создается (checkout-b) из разработки
функция ветви-Jira-sut-46 создается (checkout-b) от разработки
Это то, что я придумал, прежде чем я нашел эту нить.
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:'

Comments