2022.04.14 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git 심화 - 태그 (커밋에 태그 달기, 원격의 태그와 릴리즈)
1. log 추가 옵션들 알아보기
1) git log를 통해, 각 커밋마다 상세 변경내역까지 함께 보기 위해서?
$git log -p
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 검색어
* 기타 제한 옵션
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를 설치하면, 해당 줄에 마우스를 가져다 댔을 때, 작성자가 바로 뜬다.
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
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |