작업하다가 작업 중인 모든 파일이 깔끔하게 마무리되지 않아서 일부만 add하고 싶은데,
그렇다고 모든 add를 하나씩 치기엔 작업량이 많아서 git add . 으로 add를 해버렸다.
이럴 때 특정 파일만 제외하고 싶다면 `git reset`을 사용하면 된다.
git reset [파일 경로]
git reset에는 `--hard`, `--mixed`, `--soft` 라는 세 옵션도 있는데, 이는 특정 파일이 아닌 이전 커밋 대비 전체 진행 상황을 초기화하는 기능이다.
각각의 옵션을 살펴보기 전에 Working directory, Staging Area, Repository 라는 세 개념부터 짚고 넘어가자.
1. Working Directory
우리가 직접 파일을 수정하는 공간 (파일 탐색기 내의 폴더)
아직 Git이 추적하지 않는 상태이다.
2. Staging Area (Index)
`git add`를 실행하면 Working Directory에서 변경된 내용을 스테이징(준비)하는 공간
아직 커밋되지 않았지만, 다음 커밋에 포함될 파일 목록이 여기에 저장됨
3. Repository (Commit History)
`git commit`을 실행하면 Staging Area의 내용이 확정되어 Git 저장소(Repository)에 기록됨
즉, 우리가 작업을 하면 Working Directory에 저장이 되는데
이를 `git add` 하게 되면 Staging Area에 올라가고, `git commit`을 통해 Repository에 올라가는 형식이다.
이걸 왜 설명했냐면 git reset의 옵션들이 이 3가지 공간에 미치는 영향을 기준으로 구분되어 있기 때문이다.
먼저 표로 정리하자면 이렇다.
옵션 | HEAD 이동 | Staging Area 유지 | Working Directory 유지 | 설명 |
--soft | O | O | O | 커밋만 제거, 변경 내용 유지 |
--mixed (기본값) | O | X | O | 커밋 + Staging 초기화, 변경 내용 유지 |
--hard | O | X | X | 모든 변경사항 삭제 |
1. git reset --soft
커밋만 제거하고, 변경 내용은 유지한다. 즉, 파일들의 add된 상태는 유지하고 커밋만 취소하는 개념이다.
그럼 왜 사용하는지 궁금했는데, 커밋 메세지를 잘못 입력했거나, 일부 파일을 빠뜨렸을 때 사용하는 것이라고 한다.
2. git reset --mixed
커밋을 제거하고, 변경사항은 유지하지만 파일들의 add된 상태를 취소한다.
(옵션의 기본값이라서 옵션을 빼고 `git reset`의 형식으로 사용 시, `--mixed`와 동일한 실행을 한다.)
파일을 잘못 add 했다면 이 옵션을 사용하면 된다.
3. git reset --hard
모든 변경사항을 삭제하고 되돌린다. Working Directory에 있는 로컬 파일들도 함께 되돌려지기 때문에 사용에 주의가 필요하다.
내 경우에는 코드를 짜다가 이슈가 생길 경우 이전 상태로 롤백할 때 이 옵션을 자주 사용한다.
사용법
세 가지 옵션 모두 아래와 같은 형식으로 사용한다.
git reset --soft HEAD~1
git reset --soft [커밋 해시]
// 예시: git reset --soft 32b793921c5305de358d17d27ad8df15e6c01778
// 예시: git reset --soft 32b79 (이렇게 앞부분만 줄여도 된다!)
HEAD~1은 현재 HEAD의 이전 커밋(한 단계 전)을 가리킨다.
N단계 이전 일 경우 HEAD~2, HEAD~3처럼 쓸 수 있다고 한다.
커밋 해시란 커밋을 하면 볼 수 있는 긴 텍스트인데, 이를 통해 특정 커밋을 지정하여 리셋할 수도 있다.
'개발 > Git' 카테고리의 다른 글
[Git] GitHub 저장소에서 프로젝트 가져오기 (git clone) (0) | 2025.03.17 |
---|---|
[Git] Git 설치하고 유니티(Unity) 프로젝트와 연결하기 (0) | 2025.03.04 |