Чи є спосіб визначити, коли була створена гілка Git? У мене є відділення мого репо, і я не пам’ятаю, щоб його створити, і думав, що, можливо, бачення часової позначки про створення моє оскарження пам’яті.
Чи є спосіб визначити, коли була створена гілка Git? У мене є відділення мого репо, і я не пам’ятаю, щоб його створити, і думав, що, можливо, бачення часової позначки про створення моє оскарження пам’яті.
Відповіді:
Використовуйте
git show - підсумок `git merge-base foo master`
Якщо ви краще бачите це в контексті за допомогою gitk, тоді використовуйте
gitk --all --select-commit = `git merge-base foo master`
(де foo - назва гілки, яку ви шукаєте.)
Як зазначалося в коментарях та відповіді Джакуба , якщо ваша філія молодша за кількість днів, встановлених у налаштуваннях конфігурації gc.reflogexpire
(за замовчуванням - 90 днів), ви можете використовувати свій рефлог, щоб дізнатися, коли посилання на гілку було вперше створено.
Зверніть увагу, що git reflog
може взяти більшість git log
прапорів. Далі зауважимо, що HEAD@{0}
селектори стилів фактично є поняттям часу і насправді обробляються (зломленим чином) як рядки дати. Це означає, що ви можете використовувати прапор --date=local
і отримувати вихід таким чином:
$ git reflog --date = локальний 763008c HEAD @ {Fri 20 серпня 10:09:18 2010}: тягнути: Перемотка вперед f6cec0a HEAD @ {вт. 10 серпня 09:37:55 2010}: тягнути: Швидкий вперед e9e70bc HEAD @ {Чт 4 лютого 02:51:10 2010}: тягнути: Швидкий вперед 836f48c HEAD @ {Чт 21 січня 14:08:14 2010}: замовлення: перехід від майстра до майстра 836f48c HEAD @ {Чт 21 січня 14:08:10 2010}: тягнути: Швидкий вперед 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}: тягнути: Швидкий вперед 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 тижні тому}: тягнути: Перемотка вперед f6cec0a HEAD @ {6 тижнів тому}: тягнути: Швидкий вперед e9e70bc HEAD @ {8 місяців тому}: тягнути: Швидкий вперед 836f48c HEAD @ {8 місяців тому}: замовлення: перехід від майстра до майстра 836f48c HEAD @ {8 місяців тому}: тягнути: Швидкий вперед 24bc734 HEAD @ {8 місяців тому}: замовлення: перехід від 74fca6a42863ffacaf7ba6f1936a9f228950f657 до майстра 74fca6a HEAD @ {8 місяців тому}: замовлення: перехід від головного до v2.6.31 24bc734 HEAD @ {8 місяців тому}: тягнути: Швидкий вперед 964fe08 HEAD @ {11 місяців тому}: замовлення: перехід від 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 до майстра 4a6908a HEAD @ {11 місяців тому}: замовлення: перехід від головного до v2.6.28
Останнє зауваження: --all
прапор (який насправді прапор git-log, зрозумілий git-reflog), покаже рефлоги для всіх відомих рефлексив у refs/
(замість просто, HEAD
), що чітко покаже вам події філії:
git reflog --date = локальний - всі 860e4e4 refs / heads / master @ {Вс 19 вересня 23:00:30 2010}: фіксація: Друга. 17695bc refs / heads / example_branch @ {Пн 20 вересня 00:31:06 2010}: гілка: Створено з HEAD
gc.reflogexpire
днів.
Pro Git § 3.1 Розгалуження Git - що таке гілка , це добре пояснення того, що насправді є гіт git
Гілка в Git - це просто легкий рухомий покажчик на [a] фіксацію.
Оскільки гілка є лише легким покажчиком, git не має чіткого поняття про свою історію чи дату створення. "Але зачекай, - чую, ти кажеш, - звичайно, git знає мою історію філії!" Ну, начебто.
Якщо ви запустили будь-що з наведеного нижче:
git log <branch> --not master
gitk <branch> --not master
ви побачите, що схоже на "історію вашої філії", але це справді перелік комісій, доступних від "гілки", які не є доступними від головного. Це дає вам інформацію, яку ви хочете, але якщо і тільки якщо ви ніколи не об'єднували "гілку" назад до головного, і ніколи не об'єднували головну "гілку" з моменту створення. Якщо ви вже об'єднані, то ця історія розбіжностей зруйнується.
На щастя, рефлог часто містить потрібну інформацію, як це пояснено в різних інших відповідях тут. Використовуй це:
git reflog --date=local <branch>
показати історію філії. Останній запис у цьому списку - це (ймовірно) точка, в якій ви створили філію.
Якщо гілку видалено, то "гілка" більше не є дійсним ідентифікатором git, але ви можете використовувати це замість цього, який може знайти те, що ви хочете:
git reflog --date=local | grep <branch>
Або в оболонці cmd Windows:
git reflog --date=local | find "<branch>"
Зауважте, що рефлог не буде ефективно працювати на віддалених гілках, лише ті, над якими ви працювали локально.
gc.reflogexpire
кілька днів, як зазначено в цій відповіді та цій відповіді .
git reflog --date=local <branch>
По-перше, якщо ваша філія була створена протягом декількох gc.reflogexpire
днів (90 днів за замовчуванням, тобто близько 3 місяців), ви можете використовувати git log -g <branch>
або git reflog show <branch>
знайти перший запис у рефлозі, який би був подією створення, і виглядає приблизно так (нижче git log -g
):
Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>
Ви отримаєте, хто створив філію, скільки операцій тому і з якої гілки (ну, це може бути просто "Створено з HEAD", що не дуже допомагає).
Про це сказав у своїй відповіді Майк Сеп .
По-друге, якщо у вас є гілка довше, ніж gc.reflogexpire
ви працювали git gc
(або вона запускалася автоматично), вам доведеться знайти спільного предка з гілкою, з якої створено. Погляньте на конфігураційний файл, можливо, є branch.<branchname>.merge
запис, який би сказав вам, на якій галузі базується ця галузь.
Якщо ви знаєте, що відповідна гілка була створена за межами головної гілки (відщеплення від ведучої гілки), наприклад, ви можете використовувати таку команду, щоб побачити спільного предка:
git show $(git merge-base <branch> master)
Ви також можете спробувати git show-branch <branch> master
, як альтернативу.
Про це сказав у своїй відповіді гбакон .
Я ще не впевнений у команді git для цього, але думаю, що ви можете їх знайти в рефлегах.
.git/logs/refs/heads/<yourbranch>
Здається, мої файли мають часову позначку Unix.
Оновлення: Можливо, існує можливість використовувати історію релогізації замість історії фіксації під час друку журналів:
git log -g
Ви також можете дотримуватися цього журналу, коли ви створювали гілку. git log
відображається дата вчинення, але не дата, коли ви зробили дію, яка зробила запис у рефлозі. Я цього ще не знайшов, окрім того, як заглянув у фактичний рефлог на шлях вище.
Спробуйте це
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
%
раніше(refname)
| cut -c 5- | sort -r |
а потім проклав через grep протягом місяця, надаючи мені список зворотнього хронологічного порядку, більш-менш.
--sort='-committerdate'
(Зверніть увагу на "-" перед набором даних для зворотного хронологічного порядку).
Використання:
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 створюється (check--b) з розробки
Ці команди показують створену дату відділення dev
зmain
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
Якщо ви хочете отримати реквізити для всіх відділень
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
Я знайшов найкращий спосіб: я завжди перевіряю останню галузь, створену таким чином
git for-each-ref --sort=-committerdate refs/heads/
У поєднанні з відповіддю від Ендрю Сона ( https://stackoverflow.com/a/14265207/1929406 )
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
Це зробив це для мене: (10 років потому)
git log [--remotes] --no-walk --decorate
Оскільки немає збереженої інформації про часи створення гілок, це робиться, це відображення першої фіксації кожної гілки ( --no-walk
), яка включає дату вчинення. Використовуйте--remotes
для віддалених гілок або пропустіть для місцевих гілок.
Оскільки я роблю принаймні одну фіксацію у філії перед створенням іншої, це дозволило мені відстежувати кілька місяців створення філій (та демонструвати розробку для розробників) для цілей документації.
джерело: AnoE на stackexchange