들어가며
Git을 사용하다 보면 "앗!" 하는 순간이 있습니다. 중요한 정보를 실수로 커밋했거나, 잘못된 코드를 푸시했을 때죠.
이런 상황에서 사용할 수 있는 git reset과 revert의 차이점과 적절한 사용법을 알아보겠습니다.
git reset vs git revert
간단히 말하면:
git reset
: 커밋 히스토리를 실제로 지웁니다 (혼자 작업하는 브랜치에 적합)git revert
: 새로운 커밋을 만들어 변경사항을 되돌립니다 (협업하는 브랜치에 적합)
git reset 사용하기
1. reset의 세 가지 모드
# 1. Soft Reset: 커밋만 되돌리고 변경된 파일은 스테이징 영역에 유지
git reset --soft HEAD~1
# 2. Mixed Reset (기본값): 커밋과 스테이징을 되돌리고 변경된 파일은 워킹 디렉토리에 유지
git reset HEAD~1
# 또는
git reset --mixed HEAD~1
# 3. Hard Reset: 커밋, 스테이징, 워킹 디렉토리 모두 되돌리기
git reset --hard HEAD~1
주의사항
--hard
옵션은 변경사항을 완전히 삭제하므로 신중하게 사용해야 합니다- 이미 원격 저장소에 푸시한 커밋을 reset하면 강제 푸시(
git push -f
)가 필요합니다 - 강제 푸시는 협업 시 다른 개발자들에게 문제를 일으킬 수 있습니다
git revert 사용하기
기본 사용법
# 가장 최근 커밋 되돌리기
git revert HEAD
# 특정 커밋 되돌리기
git revert [커밋해시]
# 여러 커밋 한번에 되돌리기
git revert [시작커밋해시]..[끝커밋해시]
revert의 장점
- 히스토리가 보존되어 추적이 용이합니다
- 다른 개발자들과 충돌 가능성이 적습니다
- 변경사항을 되돌렸다는 것을 명시적으로 보여줍니다
실전 시나리오
시나리오 1: 개인 브랜치에서 실수로 커밋한 경우
# 마지막 커밋을 취소하고 변경사항은 유지하고 싶을 때
git reset --soft HEAD~1
# 완전히 되돌리고 싶을 때
git reset --hard HEAD~1
시나리오 2: main 브랜치에 잘못된 코드를 푸시한 경우
# revert를 사용해 안전하게 되돌리기
git revert HEAD
git push origin main
시나리오 3: 특정 파일만 이전 상태로 되돌리고 싶은 경우
# 특정 파일을 마지막 커밋 상태로 되돌리기
git checkout HEAD -- path/to/file
# 특정 파일을 특정 커밋 상태로 되돌리기
git checkout [커밋해시] -- path/to/file
유용한 팁
1. reset 실수 복구하기
# reset --hard 후에도 reflog로 복구 가능
git reflog
git reset --hard HEAD@{1} # 또는 특정 해시
2. revert 커밋 메시지 커스터마이징
git revert -e [커밋해시] # 커밋 메시지 편집
정리
- 혼자 작업하는 브랜치: reset 사용 (간단하고 깔끔함)
- 공유된 브랜치: revert 사용 (안전하고 추적 가능)
- 항상 변경사항을 되돌리기 전에 현재 상태를 브랜치로 백업하는 것을 추천
git reflog
를 기억하면 대부분의 실수를 복구할 수 있음
참고할만한 Git 명령어
# 현재 상태 확인
git status
# 커밋 히스토리 확인
git log --oneline
# 변경사항 확인
git diff
# 특정 커밋의 변경사항 확인
git show [커밋해시]
이렇게 하면 Git으로 인한 실수를 효과적으로 관리할 수 있습니다.
항상 중요한 작업 전에는 브랜치를 만들어 백업하는 것을 잊지 마세요!
'개발 환경 및 도구' 카테고리의 다른 글
[Error] EPERM: operation not permitted, scandir 해결 방법 (1) | 2023.11.14 |
---|---|
[VSCode] Prettier 저장 시 자동 정렬 안될 때 (0) | 2022.07.26 |
[VSCode] doctype ! 느낌표 tab 자동완성 안됨 문제 해결법 (윈도우/맥) (0) | 2022.07.25 |