У мене є проект, який має давню історію. Я хочу показати першу комісію з git.
Як це зробити?
У мене є проект, який має давню історію. Я хочу показати першу комісію з git.
Як це зробити?
Відповіді:
git rev-list --max-parents=0 HEAD
(з коментаря tiho . Як зауважує Кріс Джонсен , його --max-parents
було представлено після опублікування цієї відповіді.)
Технічно може бути більше одного кореневого коміту. Це відбувається, коли кілька раніше незалежних історій об'єднані разом. Це звичайне явище, коли проект інтегрується за допомогою злиття піддерева .
У git.git
сховищі є шість кореневих комірок у своєму графіку історії (по одному для початкового комітету Лінуса, gitk , деякі спочатку окремі інструменти, git-gui , gitweb та git-p4 ). У цьому випадку ми знаємо, що e83c516
нас це, ймовірно, цікавить. Це і найдавніша фіксація, і коренева.
У загальному випадку це не так просто.
Уявіть, що libfoo деякий час розробляється і зберігає свою історію у сховищі Git ( libfoo.git
). Незалежно, проект «бар» також розроблявся (не bar.git
), але не настільки довго, коли комісія з найдавнішою датою libfoo.git
має дату, яка передує комісії з найбільш ранньою датою в bar.git
). У якийсь момент розробники “bar” вирішують включити libfoo у свій проект, використовуючи підлиття підкресленого дерева . До цього злиття, можливо, було б тривіально визначити "перше" введення bar.git
(мабуть, було лише одне кореневе зобов'язання). Після злиття, однак, є кілька кореневих комітів, і найдавніша коренева фіксація насправді походить з історії libfoo, а не "бар".
Ви можете знайти всі кореневі комісії історії DAG так:
git rev-list --max-parents=0 HEAD
Для запису, якщо він --max-parents
був недоступний, це також працює:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Якщо у вас є корисні теги, то вони git name-rev
можуть дати вам короткий огляд історії:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin
Використовуйте це часто? Важко запам'ятати? Додайте псевдонім git для швидкого доступу
git config --global alias.first "rev-list --max-parents=0 HEAD"
Тепер ви можете просто зробити
git first
git rev-list --max-parents=0 HEAD
, що зробимо те саме, і трохи простіше.
Я виявив, що:
git log --reverse
показує коміти з початку.
git log --reverse -5
змушує ігнорувати --reverse
чомусь
Ви можете просто змінити свій журнал і просто очолити його для першого результату.
git log --pretty=oneline --reverse | head -1
git log --reverse
обертає історію, тож вам доведеться використовувати head -1
замість того, tail -1
щоб отримати першу комісію.
-n
прапор, коли --reverse
його дано.
git log $(git log --pretty=format:%H|tail -1)
git log $(git log --reverse --pretty=format:%H|head -1)
git log --format="%h" | tail -1
дає вам хеш фіксування (тобто 0dd89fb
), який ви можете вводити в інші команди, виконуючи щось подібне
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD
щоб переглянути всі зобов’язання за останній день.
git log -1
.