1 분 소요

Git을 사용하다 보면 실수로 잘못된 파일을 커밋하거나, 이미 푸시한 내용을 취소해야 하는 상황이 발생한다. 이때 사용하는 resetrevert의 차이점과 상황별 사용법을 정리해보자.

Git 커밋 되돌리기

1. git reset (과거로 돌아가기)

reset은 현재 브랜치를 특정 커밋 시점으로 되돌리는 명령어이다. 되돌아간 시점 이후의 커밋 히스토리는 삭제되므로 로컬 작업 시 주로 사용한다.

reset의 세 가지 옵션

되돌린 후 파일들의 상태에 따라 옵션을 선택할 수 있다.

옵션설명특징
–soft커밋만 취소하고, 파일은 Staging Area에 보존한다.바로 다시 커밋할 때 유용하다.
–mixed커밋과 스테이징을 취소하고, 파일을 Working Directory에 둔다.reset의 기본값(default)이다.
–hard커밋, 스테이징, 작업 디렉토리의 모든 변경사항을 삭제한다.복구가 불가능하므로 매우 주의해야 한다.

사용 예시

가장 최근 커밋을 취소하고 워킹 디렉토리에 보존할 때:

git reset --mixed HEAD~1

특정 커밋 해시로 강제 이동할 때:

git reset --hard <commit_id>

2. git revert (취소 커밋 생성하기)

revert는 기존의 커밋 기록을 지우지 않고, 특정 커밋의 내용을 되돌리는 새로운 커밋을 만드는 방식이다. 이미 원격 저장소에 푸시(push)된 커밋을 취소해야 할 때 가장 안전한 방법이다.

  • 장점: 커밋 히스토리가 유지되므로 협업 시 다른 팀원의 작업과 충돌할 위험이 적다.
  • 단점: 히스토리에 취소 기록이 남으므로 기록이 다소 지저분해 보일 수 있다.

사용 예시

git revert <commit_id>

위 명령어를 실행하면 취소 사유를 적는 에디터가 나타나며, 저장 시 새로운 커밋이 생성된다.


3. git commit –amend (마지막 커밋 수정)

마지막으로 한 커밋의 메시지를 오타 냈거나, 파일을 빠뜨렸을 때 새로 커밋하지 않고 기존 커밋을 덮어쓸 수 있다.

# 파일 수정 후 add 한 뒤 실행
git commit --amend --no-edit

총정리

상황에 맞는 적절한 명령어를 선택하는 것이 중요하다.

상황추천 방법특징
개인 작업 중 최근 커밋을 삭제하고 싶을 때git reset히스토리가 깔끔하게 사라진다.
협업 중 원격에 올라간 커밋을 취소해야 할 때git revert기록을 보존하며 안전하게 취소한다.
방금 한 커밋의 메시지만 수정하고 싶을 때git commit --amend마지막 커밋을 수정한다.

주의: reset --hard를 사용하거나 원격 저장소에 이미 올라간 커밋을 강제로 덮어쓰는 행위(push -f)는 데이터 손실을 야기할 수 있고, 동료의 작업과 충돌을 일으킬 수 있으므로 가급적 지양하는 것이 좋다. 항상 현재 상태를 확인하고 신중히 실행하길 바란다.

댓글남기기