У меня есть проект, который имеет долгую историю. Я хочу показать первый коммит на git.
Как мне это сделать?
У меня есть проект, который имеет долгую историю. Я хочу показать первый коммит на git.
Как мне это сделать?
Ответы:
git rev-list --max-parents=0 HEAD
(из комментария Тихо . Как замечает Крис Джонсен , он --max-parentsбыл представлен после публикации этого ответа.)
Технически, может быть несколько корневых коммитов. Это происходит, когда несколько ранее независимых историй объединяются. Распространено, когда проект интегрируется через слияние поддеревьев .
git.gitХранилище имеет шесть корневых фиксаций в своей истории графе ( по одному для Linus начальных фиксаций, gitk , некоторые первоначально отдельные инструменты, ГИТ-GUI , GitWeb и ГИТ-p4 ). В этом случае мы знаем, что e83c516это тот, который нам, вероятно, интересен. Это и самый ранний коммит, и корневой коммит.
В общем случае все не так просто.
Представьте, что libfoo находится в разработке некоторое время и хранит свою историю в репозитории Git ( libfoo.git). Независимо, проект «bar» также находился в стадии разработки (in bar.git), но не так долго, как libfoo (коммит с самой ранней датой в 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.