
커밋 해시는 각 커밋을 식별하는 고유한 ID입니다. Git은 파일의 변경사항을 기록(커밋)할 때마다 이력을 생성하며, 커밋 해시는 이 이력들을 구별하는 데 사용됩니다. reset이나 revert처럼 특정 커밋을 대상으로 하는 작업을 수행할 때 필요합니다.
git log 명령어로 커밋 해시를 확인할 수 있습니다.git log
# 출력 예시
# commit 1234567890abcdef1234567890abcdef12345678 (<- 이것이 커밋 해시)
# Author: ...
# Date: ...
#
# 커밋 메시지
git reset: 커밋 이력 되돌리기reset은 브랜치가 가리키는 커밋을 변경하여 과거의 특정 커밋 시점으로 돌아가는 명령어입니다. 마치 타임머신처럼 지정한 커밋 이후의 이력을 삭제합니다.
주의: reset은 커밋 히스토리를 변경하므로, 원격 저장소에 이미 푸시(push)한 커밋에 대해서는 사용을 주의해야 합니다. 공유된 히스토리를 변경하면 협업 시 큰 문제를 일으킬 수 있습니다.
기본 문법: git reset --<옵션> <커밋 해시>
reset 명령어는 옵션에 따라 변경 내용을 어디까지 되돌릴지 결정합니다.
--soft: 커밋만 취소합니다. reset으로 되돌아간 커밋의 변경 내용이 스테이징 영역(Staging Area)에 그대로 남아있습니다.
git reset --soft HEAD~1
--mixed (기본 옵션): 커밋과 스테이징을 모두 취소합니다. 변경 내용은 작업 디렉토리(Working Directory)에 파일로 남아있습니다.
add하여 커밋할 수 있습니다.git reset --mixed HEAD~1 # 또는 git reset HEAD~1
--hard: 커밋, 스테이징, 작업 디렉토리의 변경 내용을 모두 삭제합니다. 되돌아간 커밋 이후의 모든 변경사항이 영구적으로 사라집니다.
git reset --hard <돌아가고-싶은-커밋-해시>
git revert: 되돌리기 커밋 생성revert는 특정 커밋에서 발생한 변경 사항을 취소하는 새로운 커밋을 생성하는 명령어입니다. 기존 커밋 이력을 삭제하는 reset과 달리, revert는 이력을 그대로 유지하면서 되돌리기 내용을 추가합니다.
특징: revert는 기존 히스토리를 변경하지 않고 새로운 커밋을 추가하는 방식이므로, 원격 저장소에 이미 공유된 커밋을 안전하게 되돌릴 때 사용합니다.
기본 문법: git revert <커밋 해시>
# 특정 커밋(예: 1234abcd)의 변경사항을 되돌리는 새 커밋을 생성
git revert 1234abcd
git restore: 파일 변경사항 되돌리기restore는 커밋 이력 전체가 아닌, 특정 파일의 변경사항만을 되돌리는 명령어입니다. 아직 커밋되지 않은 수정 내용을 폐기할 때 유용합니다.
작업 디렉토리의 파일 되돌리기: 파일의 수정 내용을 최근 커밋 시점의 상태로 되돌립니다.
# 특정 파일의 수정사항을 폐기
git restore <파일명>
스테이징 영역의 파일 되돌리기: 스테이징된 파일(git add한 파일)을 다시 작업 디렉토리 상태로 되돌립니다. (unstage)
# 특정 파일을 스테이징 영역에서 내림
git restore --staged <파일명>
HEAD~n)커밋 해시 대신 HEAD를 사용하여 현재 커밋을 기준으로 상대적인 위치를 참조할 수 있습니다.
HEAD: 현재 브랜치의 가장 최신 커밋HEAD~1: 최신 커밋 바로 이전의 커밋HEAD~2: 2개 이전의 커밋# 가장 최근 커밋을 soft reset
git reset --soft HEAD~1
# 2개 이전 커밋의 변경사항을 revert
git revert HEAD~2
| 명령어 | 대상 | 히스토리 | 주 사용 사례 |
|---|---|---|---|
git reset | 커밋 | 변경 (삭제) | 아직 공유하지 않은 로컬(개인) 커밋을 되돌릴 때 |
git revert | 커밋 | 유지 (추가) | 이미 공유한 원격(공개) 커밋을 안전하게 되돌릴 때 |
git restore | 파일 | 변경 없음 | 아직 커밋하지 않은 파일의 수정 내용을 폐기할 때 |