У мене є проект, який має давню історію. Я хочу показати першу комісію з 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.