본문 바로가기

CHAPTER08. 분석하고 디버깅하기-얄코의 too much 친절한 깃&깃허브

by nyeongha 2024. 7. 17.

CHAPTER08. 분석하고 디버깅하기

LESSON26. 로그 자세히 알아보기

  1. 커밋에서 변경 내역까지 같이 보려면 git log명령 뒤에 -p를 붙임
    출력 결과를 보면 커밋 내역 하나하나에 어떤 내용이 바뀌었는지를 확인할 수 있음

    git log -p

    스크린샷 2024-07-16 23 44 22

  2. 최근 커밋 몇개만 확인하려면 git log명령 뒤에 -와 확인할 커밋 갯수를 입력

    git log -갯수

    스크린샷 2024-07-16 23 47 33

  3. git log명령에 -p옵션을 -갯수 와 같이 붙이면 최근 숫자 갯수만큼의 커밋과 변경내역까지 함께 볼수있음

    git log -p -갯수

    스크린샷 2024-07-16 23 50 04

  4. git log 명령에 --stat옵션을 붙임
    각 커밋의 상세내용은 보여주지 않지만 어떤 파일이 변했는지 변경내역을 볼 수 있음

    git log --stat
    image

더 간략한 결과를 보려면 git log --shortstat명령을 입력

git log --shortstat
스크린샷 2024-07-16 23 53 49

  1. 로그를 한 줄로 보려면 git log명령에 --oneline옵션을 붙임
    단순하게 커밋마다 한줄씩만 태그와 커밋 메시지를 나타냄

    git log --oneline

    스크린샷 2024-07-16 23 56 12 **--oneline옵션은 결과를 한 줄로 보여주는 --pretty=oneline옵션과 커밋 해시값을 짧게 나타내는 --abbrev-commit옵션을 합쳐 줄인것**

  2. 특정 커밋의 변경 사항에 있는 단어로 커밋을 검색하려면 git log 명령 뒤에 -S옵션을 붙이고 검색어를 입력
    작업 내역에 있는 커밋 해시값을 복사해서 커밋을 살펴보거나 리버트 같은 작업을 할 수 있음

    git log -S 찾을 단어

    스크린샷 2024-07-17 00 17 23

  1. 커밋 메시지를 기준으로 검색하려면 git log명령 뒤에 --grep옵션을 붙이고 검색어를 입력

    git log --all --grep "찾을 단어"

    스크린샷 2024-07-17 00 05 01

  2. 프로젝트의 분기 등 작업 내역으 ㄹcli에서 그래프 형태로 나타내기

    git log --all --decorate --oneline --graph

    스크린샷 2024-07-17 00 25 21

    --all은 모든 브랜치 표시
    --graph는 그래프 모양을 표현
    --decorate는 브랜치나 태그 등 모든 레퍼런스를 표시(기본값은 --decorate=short)
    --decorate=no : 출력 결과에 브랜치나 태그 등 레퍼런스가 나타나지 않음
    --decorate=full : 레퍼런스를 더욱 상세하게 출력

git log 명령의 조회 범위를 제한하는 옵션

author는 원래 작업을 수행한 원작자
committer는 마지막으로 이 작업을 적용한(저장소에 포함시킨)사람을 가리킴
|옵션|설명|
|--|--|
|--since,--after|명시한 날짜 이후의 커밋만 검색|
|--untill,--before|명시한 날짜 이전의 커밋만 조회|
|--author|입력한 저자의 커밋만 보여줌|
|--committer|입력한 커미터의 커밋만 보여줌|

Lesson27. 변경 사항 확인하기

git diff명령어는 기본적을 작업 디렉터리의 변경 사항을 확인하는데 쓰임

  1. 몇가지 변경사항을 만들고 git diff명령으로 변경사항 확인

    git diff

    스크린샷 2024-07-17 00 34 34

  2. 변경 사항이 발생한 파일 목록만 확인하려면 git diff명령에 --name-only옵션을 붙임

    git diff --name-only

    스크린샷 2024-07-17 00 35 39

  3. git add .명령으로 현재 변경사항을 스테이징 하고, 스테이지 영역에 넘어간 변경사항을 확인하려면 git diff명령에 --staged옵션을 붙임

    git diff --staged

    스크린샷 2024-07-17 00 38 11 git diff --staged대신에 git diff --cached로 입력해도 동일한 결과가 출력 스테이지되어 있는 변경된 파일 목록만 보려고 하면 git diff --staged --name-only를 입력

  4. 커밋간의 내용차이도 확인 가능
    git reset --hard로 변경사항을 없앰
    git diff 명령뒤에 두 커밋의 해시값을 각각 입력

    스크린샷 2024-07-17 00 44 30
  5. 헤드번호로 비교할 커밋의 위치를 지정할 수도있음

    git diff HEAD9 HEAD10

    스크린샷 2024-07-17 00 46 20

  6. 브랜치간의 변경사항 차이도 확인 가능

    git log --all --decorate --oneline --graph

  7. main과 다른 브랜치의 변경사항 비교

    git diff main 다른 브랜치

Lesson28. 누가 코딩했는지 알아내기

  1. git blame명령과 파일명을 입력하면 출력결과에 각 코드 행별로 누가 이 행의 코드를 작성했는지 사용자 이름을 확인할 수 있음

    git blame 파일명

    스크린샷 2024-07-17 00 52 20

  2. 파일에서 특정부분만 지정해서 작성한사람을 확인 가능

    git blame -L 시작행,끝행 파일명

    스크린샷 2024-07-17 00 54 03

작성자를바로 확인할 수있는 플러그인->gitlens

Lesson29. 오류가 발생한 시점 찾아내기

git bisect는 이진 탐색이라는 방법으로 오류발생 지점을 찾아내는 명령->범위를 절반씩 좁혀서 오류의 원인을 찾음
git bisect start명령으로 이진탐색 시작
문제가 발생한 지점을 표시하기 위해 git bisect bad명령을 입력
해당 커밋 해시로 이동하기 위해 git checkout명령 사용
문제가 발생하지 않은 지점에서는 양호하다는 의미로 git bisect good명령으로 표시
원인을 찾을때 까지 git bisect good/bad명령을 반복하면서 이진 탐색을 진행
이진 탐색을 종료하고 초기 상태로 되돌리기 위해서는 git bisect reset명령어를 사용

  1. 이진 탐색을 시작하는 git bisect start를 입력->오류 발생 확인->git bisect bad명령으로 오류지점임을 표시

    git bisect start
    git bisect bad

    스크린샷 2024-07-17 01 26 09

  2. 의심되는 지점의 해시값을 복사하고 git checkout명령으로 해당 커밋으로 이동

    git checkout 의심되는 지점의 해시값

    스크린샷 2024-07-17 01 31 00

  3. 오류가 발생하지않으면 git bisect good명령으로 표시

    git bisect good

    스크린샷 2024-07-17 01 31 14

  4. git bisect명령을 적용한 결과 자동으로 중간지점으로 head를 움직임

    스크린샷 2024-07-17 01 32 21
  5. 오류가 난 곳엔 git bisect bad표시

    git bisect bad

    스크린샷 2024-07-17 01 39 46

  1. 오류가 나지 않은 상태면 git bisect good명령을 실행하면 최초로 오류가 난 지점을 알려줌

    git bisect good

    스크린샷 2024-07-17 01 36 35

  2. git bisect명령을 반복해서 문제를 찾아내고 해결하면 git bisect reset명령으로 main브랜치로 돌아옴

    git bisect reset

    스크린샷 2024-07-17 01 37 59

외워서 써먹는 깃 명령어

01. 다른 브랜치에서 원한는 부분만 가져오기

다른 브랜치 커밋 가져오기

git cherry-pick 커밋 해시값
도착 브랜치에서 파생된 출발 브랜치를 이동할 브랜치로 옮겨 붙이기
git rebase--onto
대상 브랜치의 마디를 하나로 묶어 main브랜치로 가져오기
git merge --squash

02. 로그 자세히 알아보기

각 커밋마다 변경 사항 함께 보기

git log -p
최근 n개 커밋만 보기
git log -갯수
최근 n개 커밋을 변경 사항과 함께 보기
git log -p -갯수
커밋 변경 내역 보기
git log --stat
커밋마다 태그와 커밋 메시지를 한줄씩 보기
git log --oneline
변경사항에서 단어 검색하기
git log -S 검색어
커밋 메시지를 기준으로 검색하기
git log --grep "검색어"
자주 사용하는 그래프로 로그 보기
git log --all --decorate --oneline --graph

03. 차이 살펴보기

작업 디렉터리에서 변경 사항 확인하기

git diff
변경된 파일 목록 확인하기
git diff --name-only
스테이지 영역으로 넘어간 변경사항 확인하기
git diff --staged
커밋 간 차이 비교하기
git diff 비교대상1해시값 비교대상2해시값
브랜치간 차이 비교하기
git diff 브랜치1 브랜치2

04. 누가 코딩했는지 알아내기

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

git blame 파일이름
특정 부분을 지정해서 작성자 확인하기
git blame -L 시작줄 끝줄(또는 줄수) 파일이름

05. 오류가 발생한 시점 찾아내기

이진 탐색 시작 /종료

git bisect start/reset
오류발생지점/양호 지점 표시
git bisect bad/good
오류 의심 지점 이동하기
git checkout 의심지점해시값