Git - 되돌리기 및 취소操作的 完全 가이드

1 - 기본 개념 정리

Git에서는 작업 흐름에 따라 여러 영역으로 구분됩니다:

  • 작업 디렉토리: 실제 파일을 수정하는 공간입니다
  • Staging Area: git add 명령어로 변경사항을 올리는 영역입니다
  • 로컬 저장소: git commit 명령어로 스냅샷을 저장하는 공간입니다
  • 원격 저장소: git push 명령어로 다른 개발자와 공유하는 공간입니다

2 - Staging 전 작업 취소

파일 수정 후 아직 git add를 실행하지 않았다면 간단히 취소할 수 있습니다:

git checkout 활용

git checkout -- 수정할파일.java      # 특정 파일의 변경사항을 폐기합니다
git checkout .                       # 모든 파일의 변경사항을 폐기합니다

주의사항: 이 명령어로 새로 생성한 파일은 삭제되지 않습니다. 수정한 내용만 원래 상태로 돌아갑니다. 새 파일은 직접 삭제해야 합니다.

3 - Staging 후 작업 취소

git add를 실행한 후 commit하지 않았다면 staging 영역에서 내릴 수 있습니다:

git reset 활용

git reset HEAD 변경할파일.txt        # 특정 파일을 staging에서 내립니다
git reset HEAD .                     # 모든 파일을 staging에서 내립니다

이 명령은 staging 영역에만 영향을 줍니다. 실제 파일 내용本身은 변경되지 않습니다.

4 - Commit 후 작업 취소

이미 commit을 실행했다면 여러 방법을 사용할 수 있습니다:

git reset으로 되돌리기

git reset --hard HEAD^ 파일이름        # 특정 파일을 이전 commit 상태로 복원
git reset --hard HEAD^                # 전체를 이전 commit으로 되돌림
git reset --hard abc1234              # 특정 commit 시점으로 이동

git commit --amend로 수정

마지막 commit을 다시 작성합니다. staging된 변경사항을 마지막 commit에 통합할 수 있습니다:

git commit --amend -m "새로운 커밋 메시지"

주요 용도:

  • staging된 파일을 마지막 commit에 포함시키고 싶을 때
  • 직전 commit의 메시지를 수정하고 싶을 때

주의: 이미 원격 저장소에 push한 commit에는 사용하지 마세요. 다른 개발자의 작업에 심각한 문제를 일으킬 수 있습니다.

git rebase로 기초점 변경

分支의 시작점을 다른 commit으로 이동합니다. 프로젝트 히스토리를 깔끔하게 유지할 수 있습니다:

git rebase 적용할기준점       # 현재 branch의 시작점을 이동
git rebase -i 적용할기준점    # 대화형 모드로 commit 순서 변경, 합치기, 삭제 등 가능

주의: 이미 공유 중인 branch에서는 사용하지 마세요.

5 - git reset 상세 설명

로컬 저장소의 상태를 되돌리는 핵심 명령어입니다.

매개변수 설명:

  • --soft: 저장소는 이동하지만 staging과 작업 디렉토리는 유지됩니다
  • --mixed: 기본값입니다. 저장소와 staging을 이동하고 작업 디렉토리는 유지합니다
  • --hard: 저장소, staging, 작업 디렉토리 모두 이전 상태로 완전히 되돌립니다

실제 사용 예시:

git reset                    # 직전 commit으로 이동, 작업내용 보존
git reset 특정커밋           # 지정한 commit으로 이동

git reset --hard             # 모든 변경사항 완전 폐기
git reset --hard 특정커밋    # 지정한 시점으로 완전히 복원

git reset --hard origin/develop   # 원격 브랜치와 동일한 상태로 초기화

버전 이동 표현식:

  • 한 단계 뒤로: HEAD^, HEAD~1
  • 두 단계 뒤로: HEAD^^, HEAD~2
  • N 단계 뒤로: HEAD~N

주의: --hard 옵션은 모든 수정사항을 영구적으로 삭제하므로 신중하게 사용하세요.

6 - 관련 참고자료

6월 2일 16:24에 게시됨