본문 바로가기
Git

[Git] git 명령어 취소

by D.B_18 2021. 12. 13.

협업하여 프로젝트를 하다보면 충돌이 나거나, 실수로 커밋하는 경우가 생기기도 합니다.

이 경우 로컬에 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로 돌아가게 하는 방법입니다.

728x90
반응형

'Git' 카테고리의 다른 글

[Git] Git branch 관련 명령어 정리  (0) 2021.12.23
[Git] Git branch 병합 전략  (0) 2021.12.20
[Git] Gitlab에서 Github로 미러링 설정  (0) 2021.12.13