본문 바로가기

문과 코린이의, [Git] 기록

[문과 코린이의 IT 기록장] Git 심화 - 분석 및 디버깅하기 (log 추가 옵션들 알아보기, 차이 살펴보기, 어떤 코드를 누가 작성했는지 파악하는 방법, git bisect를 통해, 이진 탐색 알고리즘으로 문..

반응형

 


 

 

제대로 파는 Git & GitHub - by 얄코 - 인프런 | 강의

코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업 개발자는 Git 박사로 들어주는 끝판왕 강좌!, - 강의 소개 | 인프런...

www.inflearn.com

2022.04.12 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git 심화 - 취소 및 되돌리기 (관리되지 않는 파일들 삭제하기, 커밋하지 않은 변경사항 되돌리기, reset 이후 복구 방법)

 

[문과 코린이의 IT 기록장] Git 심화 - 취소 및 되돌리기 (관리되지 않는 파일들 삭제하기, 커밋하

[문과 코린이의 IT 기록장] Git 심화 - 취소 및 되돌리기 (관리되지 않는 파일들 삭제하기, 커밋하지 않은 변경사항 되돌리기, reset 이후 복구 방법) 제대로 파는 Git & GitHub - by 얄코..

vansoft1215.tistory.com

2022.04.14 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git 심화 - 태그 (커밋에 태그 달기, 원격의 태그와 릴리즈)

 

[문과 코린이의 IT 기록장] Git 심화 - 태그 (커밋에 태그 달기, 원격의 태그와 릴리즈)

[문과 코린이의 IT 기록장] Git 심화 - 태그 (커밋에 태그 달기, 원격의 태그와 릴리즈) 제대로 파는 Git & GitHub - by 얄코 - 인프런 | 강의 코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업

vansoft1215.tistory.com

2022.04.15 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git 심화 - Brnach 심화 (Fastforward vs 3-way merge, 다른 브랜치에서 원하는 커밋만 따오기, 다른 브랜치에서 파생된 브랜치 옮겨붙이기, 여러 커밋들을 하나로 묶어 가져오..

 

[문과 코린이의 IT 기록장] Git 심화 - Brnach 심화 (Fastforward vs 3-way merge, 다른 브랜치에서 원하는 커

[문과 코린이의 IT 기록장] Git 심화 - Brnach 심화 (Fastforward vs 3-way merge, 다른 브랜치에서 원하는 커밋만 따오기, 다른 브랜치에서 파생된 브랜치 옮겨붙이기, 여러 커밋들을 ..

vansoft1215.tistory.com


1. log 추가 옵션들 알아보기

1) git log를 통해, 각 커밋마다 상세 변경내역까지 함께 보기 위해서?

$git log -p

j를 눌러 아래로 내리며 확인 가능, k를 눌러 위로 올리며 확인 가능


2) git log로, 최근 n개의 커밋만 보고 싶은 경우?

$git log -n

3) git log로, 최근 n개의 커밋 상세 내역을 보고 싶은 경우?

$git log -p -n

 


4) 통계와 함께 보기

- 각 커밋마다 세부적인 내용가지 보이는 것은 아니지만, 어떤 파일이 어떻게 변화했는지 통계를 보여주는 방법

$git log --stat

- 이를 좀 더 간단하게 보고 싶다면?

$git log --shortstat


5) git log를 한 줄로 보고 싶다면?

$git log --oneline
# 이는 --pretty=oneline --abbrev-commit의 줄임

간략하고 깔끔하게 한 줄로 나옴


6) 커밋 내 변경사항들 중, 특정 검색어를 찾고 싶을 경우

$git log -S 검색어

어떤 커밋에 존재하는지 찾아준다.


7) 커밋 메시지 중, 특정 내용이 포함되었는지를 찾고 싶을 경우

$git log --grep 검색어

 

* 기타 제한 옵션

 

Git - 커밋 히스토리 조회하기

머지 커밋 표시하지 않기 저장소를 사용하는 워크플로우에 따라 머지 커밋이 차지하는 비중이 클 수도 있다. --no-merges 옵션을 사용하면 검색 결과에서 머지 커밋을 표시하지 않도록 할 수 있다.

git-scm.com

 


8) 프로젝트의 분기 내역 살펴보기

$git log --all --decorate --oneline --graph
# --all : 모든 브랜치 보기
# -- decorate : 브랜치,태그 등 모든 레퍼런스 표시 (decorate=no, decorate=short(기본), decorate=full)
# --graph : 그래프 표현

 


2. 차이 살펴보기


1) Working Directory의 변경사항 확인 방법

- 변경사항 내용들 확인

$git diff

- 변경사항 파일 목록들만 확인

$git diff --name-only

2) Staging area의 변경사항 확인 방법

- 즉 git add . 된 변경사항들의 경우, 확인하는 방법은 아래의 명령어를 사용한다.

$git diff --staged
# 이는 $git diff --cached와 같다

- Staging area에서 변경사항 파일 목록들만 확인하기 위해서는 아래의 명령어를 사용한다.

 

$git diff --staged --name only

3) 커밋간의 내용 차이 확인

$git diff (커밋1 해시, 커밋1 HEAD번호) (커밋2 해시, 커밋2 HEAD번호)
# 현재 커밋과 비교하려면 이전 커밋만 명시
$git diff --name -only (커밋1 해시, 커밋1 HEAD번호) (커밋2 해시, 커밋2 HEAD번호)
# 차이가 존재하는 파일명들만 확인 가능

4) 브랜치간의 차이 확인

$git diff (브랜치1) (브랜치2)

[ working directory, staging area의 변경사항 모두 없애는 방법 ]

$git reset --hard

 

 


3. 어떤 코드를 누가 작성했는지 파악하는 방법

1) 파일의 부분별로 작성자 확인하기

$git blame 파일명

2) 파일 내 특정 부분 지정해서 작성자 확인하기

$git blame -L (시작줄), (끝줄, 또는 +줄수) (파일명)
# git blame -L 10, 20 파일명
# git blame -L 10, +3 파일명 (추가로 몇 줄을 더 볼것인가)

3) 확장 플러그인(gitlens)를 활용해, 작성자 확인하기

- 확장 플러그인 들어가서 gitlens를 설치하면, 해당 줄에 마우스를 가져다 댔을 때, 작성자가 바로 뜬다.

작성자와, 내 user name이 같으면, You라고 표시됨

 

 


4. git bisect를 통해, 이진 탐색 알고리즘으로 문제 발생 시점을 찾아내기

- 프로그램을 개발하던 중, 어느 시점부터 에러가 발생한다는 것을 확인했을 경우, 그 에러가 어떤 커밋부터 발생하는지를 찾아야 한다.

- 오류는 해당 커밋을 실행시켜봐야 알 수 있는데, 커밋마다 하나씩 모두 되돌아가면서 실행시켜 에러 여부를 확인해보기에는 시간이 많이 걸린다.

- 따라서, 에러 발생 시점을 효과적으로 찾기 위해 git bisect를 활용한다.

 

a. 이진 탐색 시작

$git bisect start

 

b. 현재 시점이 오류 발생 지점임을 표시

$git bisect bad

 

c. 오류 발생 의심 지점으로 이동

$git checkout (해당 커밋 해시)

 

d. 해당 지점이 오류 발생 지점인지 아닌지를 표시

$git bisect bad # 오류 발생 지점일 경우
$git bisect good # 오류가 발생하지 않은 지점인 경우

 

e. 원인을 찾을 때가지 이진 탐색 반복

- 해당 지점이 오류 발생 지점이라면, b 이전의 오류 발생 의심 지점을 다시 선정해서 이동

- 해당 지점이 오류 발생 지점이 아니라면, b와 c 사이의 중간지점으로 이동해서, 해당 지점이 오류 발생 지점인지 아닌지 표시

 

f. 최종적으로 오류 발생 지점을 찾으면, main으로 돌아감

$git bisect reset

 

git bisect 예시

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형