Git 실전 가이드

Git의 핵심 개념과 실무 활용

JavaScript중급
10시간
5개 항목
학습 진행률0 / 5 (0%)

학습 항목

1. JavaScript
Git|고급|테크닉|완벽|가이드
퀴즈튜토리얼
2. JavaScript
Git|기초|완벽|가이드
퀴즈튜토리얼
3. JavaScript
중급
Git|성능|최적화|완벽|가이드
퀴즈튜토리얼
4. JavaScript
Git|중급|가이드|브랜치|전략
퀴즈튜토리얼
5. TypeScript
고급
Git|실무|활용|팁|고급
퀴즈튜토리얼
1 / 5

이미지 로딩 중...

Git 고급 테크닉 완벽 가이드 - 슬라이드 1/13

Git 고급 테크닉 완벽 가이드

Git의 고급 기능들을 마스터하여 효율적인 버전 관리와 협업 워크플로우를 구축하세요. Interactive Rebase, Cherry-pick, Reflog 등 실무에서 바로 활용할 수 있는 고급 명령어들을 다룹니다.


카테고리:JavaScript
언어:JavaScript
메인 태그:#Git
서브 태그:
#Rebase#Cherry-pick#Reflog#Bisect

들어가며

이 글에서는 Git 고급 테크닉 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. Interactive_Rebase로_커밋_히스토리_정리
  2. Cherry-pick으로_특정_커밋만_가져오기
  3. Reflog로_삭제된_커밋_복구하기
  4. Bisect로_버그_발생_커밋_찾기
  5. Stash로_작업_임시_저장_활용
  6. Worktree로_여러_브랜치_동시_작업
  7. Filter-branch로_전체_히스토리_수정
  8. Submodule로_외부_저장소_관리
  9. Blame과_Log로_코드_변경_추적
  10. Hooks로_자동화_워크플로우_구축
  11. Sparse-checkout으로_부분_체크아웃
  12. Advanced_Merge_전략_활용

1. Interactive_Rebase로_커밋_히스토리_정리

개요

Interactive Rebase를 사용하여 여러 커밋을 하나로 합치거나(squash), 순서를 변경하거나, 메시지를 수정할 수 있습니다.

코드 예제

# 최근 3개의 커밋을 대화형으로 수정
git rebase -i HEAD~3

# 에디터에서 pick을 squash로 변경하여 커밋 합치기
# pick abc123 첫 번째 커밋
# squash def456 두 번째 커밋
# squash ghi789 세 번째 커밋

설명

HEAD~3은 최근 3개 커밋을 의미하며, squash를 사용하면 여러 커밋을 하나로 깔끔하게 합칠 수 있습니다.


2. Cherry-pick으로_특정_커밋만_가져오기

개요

다른 브랜치의 특정 커밋만 선택적으로 현재 브랜치에 적용할 수 있습니다.

코드 예제

# 특정 커밋 하나만 가져오기
git cherry-pick abc123

# 여러 커밋을 순서대로 가져오기
git cherry-pick abc123 def456 ghi789

# 커밋만 적용하고 자동 커밋하지 않기
git cherry-pick -n abc123

설명

다른 브랜치의 버그 수정이나 특정 기능만 선택적으로 가져올 때 매우 유용합니다.


3. Reflog로_삭제된_커밋_복구하기

개요

Reflog는 모든 HEAD 이동 기록을 보관하므로, 실수로 삭제한 커밋이나 브랜치를 복구할 수 있습니다.

코드 예제

# HEAD 이동 기록 확인
git reflog

# 특정 시점으로 복구
git reset --hard HEAD@{2}

# 삭제된 브랜치 복구
git checkout -b recovered-branch HEAD@{5}

설명

reflog는 30일간 보관되므로 실수로 삭제한 커밋도 복구 가능합니다. 강력한 안전망입니다.


4. Bisect로_버그_발생_커밋_찾기

개요

이진 탐색 알고리즘으로 버그가 처음 발생한 커밋을 자동으로 찾아줍니다.

코드 예제

# Bisect 시작
git bisect start

# 현재는 버그 있음
git bisect bad

# 특정 과거 커밋은 정상
git bisect good abc123

# 테스트 후 good/bad 반복
# 버그 커밋 찾으면 종료
git bisect reset

설명

수백 개의 커밋 중에서 버그가 처음 발생한 시점을 빠르게 찾을 수 있는 강력한 디버깅 도구입니다.


5. Stash로_작업_임시_저장_활용

개요

커밋하지 않은 변경사항을 임시로 저장하고 나중에 다시 적용할 수 있습니다.

코드 예제

# 현재 작업 임시 저장
git stash save "작업 중인 기능"

# Stash 목록 확인
git stash list

# 특정 Stash 적용 (유지)
git stash apply stash@{0}

# Stash 적용 후 삭제
git stash pop

설명

브랜치 전환이 필요한데 커밋하기 애매한 상황에서 작업을 안전하게 보관할 수 있습니다.


6. Worktree로_여러_브랜치_동시_작업

개요

하나의 저장소에서 여러 브랜치를 서로 다른 디렉토리에서 동시에 작업할 수 있습니다.

코드 예제

# 새 워크트리 생성
git worktree add ../feature-branch feature

# 워크트리 목록 확인
git worktree list

# 워크트리 제거
git worktree remove ../feature-branch

설명

핫픽스를 긴급하게 작업하면서도 현재 개발 브랜치의 상태를 유지할 수 있습니다.


7. Filter-branch로_전체_히스토리_수정

개요

전체 커밋 히스토리에서 특정 파일을 제거하거나 이메일을 일괄 변경할 수 있습니다.

코드 예제

# 특정 파일을 모든 히스토리에서 제거
git filter-branch --tree-filter \
  'rm -f passwords.txt' HEAD

# 작성자 이메일 일괄 변경
git filter-branch --env-filter '
  if [ "$GIT_AUTHOR_EMAIL" = "old@email.com" ]
  then
    export GIT_AUTHOR_EMAIL="new@email.com"
  fi' HEAD

설명

민감한 정보가 실수로 커밋된 경우 전체 히스토리에서 완전히 제거할 수 있습니다.


8. Submodule로_외부_저장소_관리

개요

다른 Git 저장소를 현재 프로젝트의 하위 디렉토리로 포함시켜 관리할 수 있습니다.

코드 예제

# Submodule 추가
git submodule add https://github.com/user/lib.git libs/lib

# Submodule 초기화 및 업데이트
git submodule init
git submodule update

# 모든 Submodule을 최신으로 업데이트
git submodule update --remote --recursive

설명

공유 라이브러리나 공통 모듈을 별도 저장소로 관리하면서 프로젝트에 통합할 수 있습니다.


9. Blame과_Log로_코드_변경_추적

개요

특정 코드 라인이 언제, 누가, 왜 변경했는지 상세하게 추적할 수 있습니다.

코드 예제

# 각 라인의 마지막 수정자 확인
git blame src/index.js

# 특정 라인 범위만 확인
git blame -L 10,20 src/index.js

# 파일의 변경 히스토리와 diff 확인
git log -p src/index.js

설명

버그의 원인을 찾거나 코드 변경 의도를 파악할 때 매우 유용한 명령어입니다.


10. Hooks로_자동화_워크플로우_구축

개요

Git 이벤트 발생 시 자동으로 실행되는 스크립트를 작성하여 워크플로우를 자동화할 수 있습니다.

코드 예제

# .git/hooks/pre-commit 파일 생성
#!/bin/sh
npm run lint
npm test

if [ $? -ne 0 ]; then
  echo "Tests failed, commit aborted"
  exit 1
fi

chmod +x .git/hooks/pre-commit

설명

커밋 전에 자동으로 테스트와 린트를 실행하여 코드 품질을 보장할 수 있습니다.


11. Sparse-checkout으로_부분_체크아웃

개요

대용량 저장소에서 필요한 디렉토리만 선택적으로 체크아웃하여 작업 효율을 높일 수 있습니다.

코드 예제

# Sparse checkout 활성화
git sparse-checkout init --cone

# 특정 디렉토리만 체크아웃
git sparse-checkout set src/components

# 여러 디렉토리 추가
git sparse-checkout add src/utils src/hooks

설명

모노레포처럼 거대한 저장소에서 필요한 부분만 가져와 디스크 공간과 시간을 절약할 수 있습니다.


12. Advanced_Merge_전략_활용

개요

병합 충돌 해결 전략을 세밀하게 제어하여 원하는 방식으로 브랜치를 병합할 수 있습니다.

코드 예제

# 현재 브랜치 변경사항을 우선
git merge -X ours feature-branch

# 병합할 브랜치 변경사항을 우선
git merge -X theirs feature-branch

# 충돌 시 병합 전 상태로 되돌리기
git merge --abort

설명

대규모 병합에서 특정 전략을 사용하면 충돌 해결 시간을 크게 단축할 수 있습니다.


마치며

이번 글에서는 Git 고급 테크닉 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#Git #Rebase #Cherry-pick #Reflog #Bisect

#Git#Rebase#Cherry-pick#Reflog#Bisect#JavaScript