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 - 관련 참고자료
- Git 취소操作 完全 가이드: https://git-scm.com/book/ko/v2/Git- 기초-되돌리기