'git log'로 첫 번째 커밋을 표시하는 방법은 무엇입니까?
오랜 역사를 가진 프로젝트가 있습니다. git에 대한 첫 번째 커밋을 보여주고 싶습니다.
어떻게해야합니까?
짧은 답변
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 log --reverse
시작부터 커밋을 보여줍니다.
당신은 당신의 로그를 반전하고 첫 번째 결과를 위해 향할 수 있습니다.
git log --pretty=oneline --reverse | head -1
git log $(git log --pretty=format:%H|tail -1)
가장 아름다운 방법은 아닙니다.
git log --pretty=oneline | wc -l
이것은 당신에게 숫자를 제공합니다
git log HEAD~<The number minus one>
참고 URL : https://stackoverflow.com/questions/5188914/how-to-show-first-commit-by-git-log
'IT' 카테고리의 다른 글
T-SQL을 사용하여 일 월과 연도의 날짜를 만듭니다. (0) | 2020.04.02 |
---|---|
ng-click을 사용하여 배열에서 항목 또는 객체를 어떻게 삭제합니까? (0) | 2020.04.01 |
정밀도가 2 인 소수에 대한 간단한 정규식 (0) | 2020.04.01 |
디렉토리에서 모든 Python 단위 테스트를 어떻게 실행합니까? (0) | 2020.04.01 |
점선 테두리 점 사이의 공간을 늘리는 방법 (0) | 2020.04.01 |