[Git]commit 취소&수정하기: push 이전에 실수 복구하기

유재원·2024년 12월 26일
0

Git / Github

목록 보기
5/6

시작하며

  • 이 글에서는 git에서의 commit을 취소하거나 수정하는 방법을 알아본다.
  • 개발을 하다보면 commit을 하고 메세지를 바꾸고 싶을 때도 있고, 다양한 상황에 직면할 수 있는데 그걸 대비해보고자 하는 목적이다.
  • git에서 commit을 취소&수정한다는 의미는 git push를 하기 이전의 상황에서는 로컬에서만 작업한 커밋을 되돌리는 방법을 뜻한다.
  • 또한, 이 글에서는 커밋을 되돌리는 방법과 함께, HEADHEAD~1의 의미도 자세히 알아보겠다.

1. HEAD와 HEAD~1의 의미

Git에서 HEAD는 현재 작업 중인 브랜치의 가장 최신 커밋을 가리킨다.

  • HEAD: 현재 커밋 (브랜치의 가장 마지막 커밋)
  • HEAD~1: HEAD에서 한 단계 이전 커밋
  • HEAD~2: 두 단계 이전 커밋 (숫자가 클수록 과거 커밋을 가리킴)

비슷한 표현: HEAD^

  • HEAD^HEAD~1과 같은 의미이다.
  • 두 단계 이전 커밋은 HEAD^^ 또는 HEAD~2로 표현한다.

활용 예시:

  • HEAD~1을 사용해 이전 커밋으로 작업을 되돌리거나 특정 파일을 복원할 수 있다.

2. 커밋을 되돌리는 다양한 방법

2.1 마지막 커밋 내용만 수정하고 싶을 때

  • 커밋 메시지를 변경하거나 추가로 파일을 포함할 때 사용한다.
  • 개인적으로 이 방법이 제일 자주 쓰일 듯 하다.
# 수정할 파일 추가
git add <파일명>

# 기존 커밋에 추가
git commit --amend
# 마지막 커밋 메시지 수정
git commit --amend -m "새로운 커밋 메시지"

# 스테이징에서 파일 제거
git restore --staged <파일명>
# 기존 커밋 업데이트
git commit --amend
  • 새로운 커밋 메시지를 입력하거나 기존 메시지를 편집할 수 있다.
  • 커밋 해시가 변경되므로 주의해야 한다.

2.2 마지막 커밋을 삭제하고 작업 내용 유지

👉 커밋을 취소하고, 작업한 내용을 다시 수정하거나 커밋하고 싶을 때 사용한다.

git reset --soft HEAD~1
  • 마지막 커밋은 삭제되지만, 작업 파일은 스테이징 상태로 남아 있다.

2.3 마지막 커밋 및 작업 내용 모두 삭제

👉 커밋과 작업한 내용을 모두 삭제하고 초기 상태로 되돌리고 싶을 때.

git reset --hard HEAD~1
  • 마지막 커밋과 작업 파일이 모두 삭제된다.
  • git reflog를 사용해 복구할 수 있으니, 실수로 삭제했을 경우 reflog를 확인하면 된다.

2.4 중간 커밋을 되돌리고 싶을 때 (revert)

👉 특정 커밋을 되돌리는 새로운 커밋을 생성한다.

git revert <커밋 해시>
  • 이전 커밋을 삭제하지 않고, 되돌리는 추가 커밋을 생성한다.
  • 이미 Push한 커밋을 되돌릴 때 안전하게 사용된다.

2.5 특정 파일만 이전 상태로 되돌리기

👉 커밋된 내용 중 특정 파일만 복원하고 싶을 때.

git restore --source=HEAD~1 <파일명>
# 또는
git checkout HEAD~1 -- <파일명>
  • 파일을 한 단계 이전 상태로 되돌릴 수 있다.

3. 커밋 되돌리기의 활용 상황

  • 커밋 메시지 수정: git commit --amend
  • 커밋 취소 및 작업 유지: git reset --soft HEAD~1
  • 모든 작업 초기화: git reset --hard HEAD~1

4. HEAD~1과 다른 표현의 차이

표현의미
HEAD현재 커밋
HEAD~1현재 커밋에서 한 단계 이전 커밋
HEAD~2현재 커밋에서 두 단계 이전 커밋
HEAD^HEAD~1과 동일한 의미
HEAD^^HEAD~2와 동일한 의미

5. 마무리

  • Git에서 Push 이전에는 실수를 되돌리는 것이 비교적 간단하다.
  • 다음 글에서는 Push 이후 실수한 내용을 바로잡는 법에 대해 알아보겠다.
profile
나는 달린다

0개의 댓글