IT

'git log'로 첫 번째 커밋을 표시하는 방법은 무엇입니까?

lottoking 2020. 4. 1. 08:16
반응형

'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

반응형