협업하여 프로젝트를 하다보면 충돌이 나거나, 실수로 커밋하는 경우가 생기기도 합니다.
이 경우 로컬에 commit만 한 경우에는 reset 기능으로 처리할 수 있지만, 원격 저장소까지 push된 경우에는 revert를 사용합니다.
오늘은 reset 기능에 대해 알아보도록 하겠습니다.
먼저, git은 서로 다른 세 트리를 관리합니다.
- HEAD
: 현재 브랜치를 가리키는 포인터이며, 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킵니다.
- INDEX
: Staging Area로, 사용자가 git commit 명령어를 실행했을 때 git이 처리할 것들이 존재하는 곳입니다.
- 워킹 디렉토리
: 샌드박스입니다. (다음 커밋을 위한 작업 공간)
Reset
특정 지점의 과거 커밋으로 이동하며, 이동된 이후의 커밋은 삭제됩니다.
주요 옵션
- soft : 해당 커밋 상태로 index 영역과 워킹디렉토리 모두 변경되지 않습니다.
변경 삭제 이력이 남아있습니다. mixed와는 다르게 stage에 올라간 상태이므로 바로 커밋을 진행할 수 있습니다.
- mixed: 해당 커밋의 상태로 index 영역은 초기화되고 워킹디렉토리는 변경되지 않습니다.
변경, 삭제 이력은 남아있습니다. unstage 상태로 남아 있으므로 커밋을 진행하기 전에 stage에 먼저 추가해야 합니다.
- hard: 해당 커밋의 상태로 워킹 디렉토리와 index 영역이 모두 초기화됩니다. 변경 이력 및 내용을 전부 삭제합니다.
1. 작업 취소
git reset --soft HEAD^
수정한 내용은 그대로 두고 HEAD를 한 단계 위로 조정하여 commit을 취소합니다.
--hard 옵션을 사용할 경우 작업한 내용이 날아가므로 유의해야 합니다.
2. commit 취소
git reset --Hard @^
3. pull 취소
git reset --hard ORIG_HEAD
4. merge 취소
git reset --merge ORIG_HEAD
ORIG_HEAD는 이전 작업한 곳의 HEAD를 의미합니다. pull 이나 merge를 하는 경우에 잘못하게 되면 해당 명령어를 통해 취소할 수 있습니다.
5. add 취소
git reset HEAD
default인 mixed를 사용하여 HEAD로 돌아가게 하는 방법입니다.
'Git' 카테고리의 다른 글
[Git] Git branch 관련 명령어 정리 (0) | 2021.12.23 |
---|---|
[Git] Git branch 병합 전략 (0) | 2021.12.20 |
[Git] Gitlab에서 Github로 미러링 설정 (0) | 2021.12.13 |