원격 변경사항을 가져와 현재 브랜치에 통합 (설정에 따라 merge/rebase/fast-forward)
혼자 작업할 때 간단히
git fetch
원격 변경사항만 가져오기 (병합 X)
merge/rebase 전에 최신 상태 확인
merge / rebase
명령어
설명
언제 쓰나
git merge {branch}
현재 브랜치에 다른 브랜치 병합
이력을 그대로 남기고 합칠 때
git rebase {branch}
현재 브랜치를 다른 브랜치 기준으로 재배치
PR 올리기 전 히스토리 정리
git rebase -i HEAD~{n}
최근 n개 커밋 대화형 리베이스 (squash 등)
자잘한 커밋을 하나로 합칠 때
git rebase --continue
충돌 해결 후 리베이스 계속 진행
rebase 중 conflict 해결한 직후
git rebase --abort
리베이스 중단, 이전 상태로 복구
rebase가 꼬였을 때
stash
명령어
설명
언제 쓰나
git stash
현재 변경사항 임시 저장 (추적 중인 파일만, untracked 파일은 제외)
급하게 브랜치 전환해야 할 때
git stash -u
untracked 파일까지 포함해서 임시 저장
새로 만든 파일도 같이 저장하고 싶을 때
git stash list
저장된 stash 목록 확인
뭘 저장해뒀는지 헷갈릴 때
git stash pop
가장 최근 stash 적용 + 목록에서 제거
원래 작업으로 돌아왔을 때
git stash apply
stash 적용 (목록에는 유지)
같은 stash를 여러 브랜치에 적용할 때
git stash drop
특정 stash 삭제
더 이상 필요 없는 stash 정리
되돌리기 (reset / revert / restore)
명령어
설명
언제 쓰나
git restore {file}
워킹 디렉토리 변경사항 되돌리기 (스테이징 전)
파일 수정 취소하고 싶을 때
git restore --staged {file}
스테이징 취소 (변경 내용은 유지)
add 잘못 했을 때
git restore --source={commit} {file}
특정 커밋 시점의 파일 내용으로 복구
예전 버전 파일 하나만 되돌리고 싶을 때
git reset --soft HEAD~1
직전 커밋 취소, 변경사항은 스테이징 상태로 유지
커밋만 다시 하고 싶을 때
git reset --mixed HEAD~1
직전 커밋 취소, 변경사항은 워킹 디렉토리로 (기본값)
스테이징부터 다시 정리하고 싶을 때
git reset --hard HEAD~1
직전 커밋 취소 + 추적 중인 파일의 변경사항 폐기 (untracked 파일은 안 지워짐)
완전히 처음부터 다시 할 때
git revert {commit}
특정 커밋을 취소하는 새 커밋 생성 (이력 보존)
이미 push된 커밋을 안전하게 되돌릴 때
자주 쓰는 워크플로우
새로운 기능 개발
git switch -c feature/login # 브랜치 생성 + 전환git add . # 변경사항 스테이징git commit -m "feat: 로그인 기능 추가"git push -u origin feature/login # 최초 push
커밋 하나 빠뜨렸을 때 (push 전)
git add {빠뜨린 파일}git commit --amend --no-edit # 메시지 유지, 파일만 추가git push -u origin {branch} # 최초 push라면 -u, 아니면 push --force-with-lease
PR 올리기 전 히스토리 정리
git fetch origin # 원격 최신 상태 확인git rebase -i HEAD~3 # 최근 3개 커밋 squashgit push --force-with-lease # rebase로 이력이 바뀌었으므로 강제 push 필요
작업 중 급하게 브랜치 전환해야 할 때
git stash # 현재 변경사항 임시 저장 (untracked 파일까지 저장하려면 git stash -u)git switch main# ... 급한 작업 처리 ...git switch feature/logingit stash pop # 저장해둔 변경사항 복구
커밋/리베이스를 잘못해서 되돌리고 싶을 때
git reflog # HEAD 이동 이력에서 원하는 시점 커밋 해시 찾기git reset --hard {commit} # 해당 시점으로 강제 복구
주의사항
git reset --hard는 추적 중인 파일의 워킹 디렉토리 변경사항을 복구 불가능하게 폐기한다 (untracked 파일은 지우지 않는다).
git rebase는 이미 원격에 push된 공유 브랜치에서는 지양한다 (이력 충돌 유발).
git commit --amend는 push 이전에만 사용한다. push 후 amend하면 강제 push가 필요해 협업 시 위험하다.
강제 push는 가능하면 --force보다 --force-with-lease를 사용한다 (일반 강제 push보다 안전하지만, 백그라운드 fetch 등으로 로컬 remote-tracking ref가 최신화되면 남의 변경을 덮어쓸 가능성이 완전히 없어지는 건 아니다 — “방지”가 아니라 “위험을 줄이는” 수준으로 이해한다).