ETC

Github Commit에서 특정 로그 찾기 ( 특정 커밋 찾기 )

pyozzi 2020. 4. 27. 00:09

대규모 프로젝트는 Commit수가 어마어마하게 많다.

여기서 특정 커밋을 수동으로 찾는다는 것은 엄청난 노동이다..

 

 

[그림 1] Google Git

 

[그림 1]에서 보이는 하나 하나가 다 커밋된 로그들이다.

수 년전부터 몇 주전까지의 커밋 수를 따지면 적어도 수 백개는 된다.

여기서 우리가 원하는 커밋 시점을 찾으려면,,, 그리고 또 최근 순으로 정렬돼 있는게 아니라서 더 힘들다.

 

 


그래서 이번 글에서는 특정 커밋의 로그를 검색하는 방법을 정리하려고 한다.

git log --oneline --grep "찾을 로그메시지"

위 명령어로 해당 git에 모든 로그를 찾아볼 수 있다.

 

먼저 git clone으로 레파지토리를 복제해온 뒤, 해당 디렉토리에서 위 명령어를 사용해서 특정커밋 해쉬를 알아내고

git reset --hard 명령어로 해당 커밋으로 맞춰주면 된다.

 

실제 사용은 다음과 같다.

 

1. 특정 커밋 로그메시지 확인

 

[그림 2] 패치된 커밋 로그 확인

 

내가 확인하려는 커밋 로그메시지는 "UPSTREAM: binder: fix incorrect calculation for num_valid"이다.

해당 로그 메시지로 커밋된 시점을 내가 복제해 온 레파지토리에서 찾아주면 된다.

 

 

 

2. 특정 커밋 로그메시지 찾기

 

[그림 3] git log --oneline --grep

 

git log --oneline --grep num_valid 명령어로 num_valid가 포함된 커밋 메시지를 찾은 결과다.

해당 레파지토리는 https://android.googlesource.com/kernel/goldfish 여기다.

 

확인해보려면 위에서 찾은 해시값 "e9ff34a"/+/[해시값] 포맷으로 주소뒤에 붙여주면 해당 커밋으로 이동할 수 있다.

 

 

[그림 3] https://android.googlesource.com/kernel/goldfish/+/e9ff34a

 

해당 커밋으로 이동해보면 우리가 찾던 "UPSTREAM: binder: fix incorrect calculation for num_valid" 커밋 시점인 것을 확인할 수 있다. 이제 해당 커밋 시점으로 돌아가면 가보자.

 

 

3. 특정 커밋으로 돌아가기

git reset --hard "해시값"

해당 레파지토리 위치에서 위 명령어를 입력해주면 해당 커밋 시점으로 돌아갈 수 있다.

여기서는 git reset --hard e9ff34a 가 된다

 

 

[그림 4] git reset --hard e9ff34a

 

해당 명령어를 입력해주면 해당 커밋 메시지가 출력되면서 git clone해온 레파지토리의 파일들도 해당 커밋 시점으로 바뀌게 된다.

 

 

 

[그림 5] git parent commit

 

만약, 해당 커밋 직전으로 시점을 돌리고 싶으면 parent커밋으로 돌아가면 된다.

[그림 5]에서는 30e26cf~~c16d가 된다.

 

 

[그림 6] git reset --hard 30e26cf~~

 

커밋 해시값은 앞 6글자만 입력해줘도 되고, 전부 다 입력해줘도 된다.

 

Ref. https://blog.outsider.ne.kr/849
Ref. https://chp747.tistory.com/311