답변:
git rev-list --max-parents=0 HEAD
(에서 tiho의 코멘트 . 마찬가지로 크리스 욘센 고지 , --max-parents
이 답변이 게시 된 이후 도입되었다.)
기술적으로 루트 커밋이 둘 이상있을 수 있습니다. 이것은 이전에 독립적 인 여러 기록이 병합 될 때 발생합니다. 하위 트리 병합을 통해 프로젝트를 통합 할 때 일반적 입니다.
git.git
저장소의 역사 그래프에서 여섯 루트 커밋이 (각각 하나씩을 리누스의 초기 투입, gitk이 일부 초기에 별도의 도구, 자식 - GUI를 , gitweb , 그리고 자식-P4 ). 이 경우, 우리는 이것이 e83c516
우리가 관심을 가질만한 것임을 알고 있습니다. 가장 이른 커밋과 루트 커밋입니다.
일반적인 경우에는 그렇게 간단하지 않습니다.
libfoo 가 한동안 개발되어 Git 저장소 ( libfoo.git
)에 기록을 유지 한다고 상상해보십시오 . 독립적으로, "bar"프로젝트도 개발 bar.git
중이지만 (in ), 긴 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 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 -1
.