Git 노트

설정

  • git config --global user.name "이름" : 사용자 이름
  • git config --global user.email "이메일" : 사용자 이메일
  • git config --global core.editor vim : 기본 에디터
  • git config --global init.defaultBranch main : 기본 브랜치명
  • git config --list : 설정 확인

저장소

  • git init : 새 저장소 생성
  • git clone [url] : 원격 저장소 복제
  • git clone [url] [폴더명] : 지정 폴더에 복제
  • git clone --depth 1 [url] : 최신 커밋만 복제 (shallow)

기본 흐름

  • git status : 상태 확인
  • git add [파일] : 스테이징
  • git add . : 전체 스테이징
  • git add -p : 변경사항 선택적 스테이징 (hunk 단위)
  • git commit -m "메시지" : 커밋
  • git commit --amend : 마지막 커밋 수정
  • git commit --amend --no-edit : 메시지 변경 없이 수정

브랜치

  • git branch : 로컬 브랜치 목록
  • git branch -a : 전체 브랜치 목록 (원격 포함)
  • git branch [이름] : 브랜치 생성
  • git branch -d [이름] : 브랜치 삭제 (병합된 경우)
  • git branch -D [이름] : 브랜치 강제 삭제
  • git branch -m [새이름] : 현재 브랜치 이름 변경
  • git switch [브랜치] : 브랜치 전환
  • git switch -c [브랜치] : 브랜치 생성 + 전환
  • git checkout [브랜치] : 브랜치 전환 (레거시)
  • git checkout -b [브랜치] : 브랜치 생성 + 전환 (레거시)

병합

  • git merge [브랜치] : 현재 브랜치에 병합
  • git merge --no-ff [브랜치] : fast-forward 없이 병합 커밋 생성
  • git merge --abort : 병합 충돌 시 취소
  • git rebase [브랜치] : 리베이스
  • git rebase -i HEAD~[n] : 최근 n개 커밋 인터랙티브 리베이스
  • git rebase --abort : 리베이스 취소
  • git cherry-pick [해시] : 특정 커밋만 가져오기

원격

  • git remote -v : 원격 저장소 목록
  • git remote add [이름] [url] : 원격 저장소 추가
  • git remote remove [이름] : 원격 저장소 제거
  • git fetch : 원격 변경사항 가져오기 (병합 없이)
  • git fetch --prune : 삭제된 원격 브랜치 정리
  • git pull : fetch + merge
  • git pull --rebase : fetch + rebase
  • git push : 원격에 푸시
  • git push -u origin [브랜치] : 업스트림 설정 + 푸시
  • git push --force-with-lease : 안전한 강제 푸시

되돌리기

  • git restore [파일] : 워킹 디렉토리 변경 취소
  • git restore --staged [파일] : 스테이징 취소
  • git checkout -- [파일] : 변경 취소 (레거시)
  • git reset HEAD [파일] : 스테이징 취소 (레거시)
  • git reset --soft HEAD~1 : 커밋 취소 (변경사항 스테이징 유지)
  • git reset --mixed HEAD~1 : 커밋 취소 (변경사항 워킹 디렉토리 유지)
  • git reset --hard HEAD~1 : 커밋 + 변경사항 모두 삭제
  • git revert [해시] : 커밋을 되돌리는 새 커밋 생성

Stash

  • git stash : 변경사항 임시 저장
  • git stash -m "메시지" : 메시지와 함께 저장
  • git stash -u : untracked 파일 포함
  • git stash list : 스태시 목록
  • git stash pop : 최근 스태시 적용 + 삭제
  • git stash apply : 최근 스태시 적용 (삭제 안 함)
  • git stash drop : 최근 스태시 삭제
  • git stash clear : 전체 스태시 삭제

조회

  • git log : 커밋 로그
  • git log --oneline : 한 줄 로그
  • git log --oneline --graph --all : 브랜치 그래프
  • git log -p [파일] : 파일 변경 이력
  • git log --author="이름" : 작성자별 필터
  • git log --since="2024-01-01" : 날짜 필터
  • git diff : 워킹 디렉토리 변경사항
  • git diff --staged : 스테이징된 변경사항
  • git diff [브랜치A]..[브랜치B] : 브랜치 간 비교
  • git show [해시] : 특정 커밋 상세
  • git blame [파일] : 줄별 마지막 수정자
  • git reflog : HEAD 이동 이력 (복구용)

태그

  • git tag : 태그 목록
  • git tag [이름] : 경량 태그 생성
  • git tag -a [이름] -m "메시지" : 주석 태그 생성
  • git tag -d [이름] : 태그 삭제
  • git push origin [태그] : 태그 푸시
  • git push origin --tags : 전체 태그 푸시

유용한 조합

  • git log --oneline --graph --all --decorate : 전체 히스토리 시각화
  • git diff --name-only : 변경된 파일 이름만
  • git log -S "검색어" : 코드 변경 내용 검색 (pickaxe)
  • git bisect startgit bisect badgit bisect good [해시] : 이진 탐색으로 버그 커밋 찾기
  • git clean -fd : untracked 파일 + 폴더 삭제
  • git shortlog -sn : 커밋 수 기준 기여자 랭킹

.gitignore

# 패턴 예시
*.log           # 확장자
build/          # 디렉토리
!important.log  # 예외 (추적 유지)
**/temp         # 모든 경로의 temp
  • git rm --cached [파일] : 이미 추적 중인 파일을 gitignore 적용
Command Palette
Search for a command to run