본문 바로가기
git (협업 툴) 사용법 정리

GIT - 커밋이나 ADD를 취소하기 (실수로 Commit 이나 Add를 잘못했을 때)

by 번데기 개발자 2020. 11. 8.
반응형

보통 GIT을 이용하여 개발을 하다보면, 나도 모르게 습관적으로 commit이나 ADD를 하고 아차, 할때가 있습니다. 예를 들어, 어떤 기능을 만들고 테스트를 제대로 안해보고 commit을 했는데 실제로 돌려보니 기능에 문제가 있거나, 오탈자가 났거나 할때입니다. 

 

제가 처음에 GIT을 사용했을때 이러한 경우 참 난감했는데, 결국에는 다 방법이 있더라구요. GIT에서 마지막 COMMIT을 취소하고 수정하는 방법을 알아보겠습니다. 

 

GIT ADD 취소하기

$ git reset HEAD <file> // 해당 파일만 add 취소
$ git reset HEAD // 모든 파일 add 취소

 

보통 ADD는 Commit하기전 파일에 대한 변경사항을 Staging area로 추가하기 위해 사용합니다. 즉 변경된 파일들중에 COMMIT할 파일들만 Staging (커밋 대기 저장소)에 추가하기 위해서 사용합니다.

 

해당 명령어를 사용하면 git add를 취소할 수 있습니다. 만약 뒤에 <file>부분이 없다면 모든 파일의 ADD를 취소합니다. 즉 staging area에 추가된 파일들을 다시 unstaged 상태로 변경하는 것을 의미합니다. 

 

주로 커밋할 내용을 잘못 추가했을때 이를 수정하기 위해 사용합니다.

 

아래는 실습해본 내용입니다.

 

 

GIT COMMIT 취소하기

$ git reset HEAD^ (mixed)
$ git reset --hard HEAD^
$ git reset --soft HEAD^

 

commit을 한뒤에 취소하기 위해서는 위와같은 명령어를 사용하여 취소합니다. commit 명령어를 취소하는 reset HEAD^의 옵션에는 3가지 방식이 있는데 저는 개인적으로 옵션을 안쓰고 git reset HEAD^만 사용합니다.

 

그렇지만 옵션에 대해서도 한번 살펴보겠습니다.

 

  • --mixed(기본 옵션) : 커밋을 취소하고 파일들은 unstaged 상태로 워킹 디렉토리에 보존
  • --soft : 커밋을 취소하고 해당 파일들은 staged 상태로 워킹 디렉토리에 보존
  • --hard : commit을 취소하고 해당 파일들은 unstaged상태로 워킹 디렉토리에서 삭제

즉 Commit을 취소하고, 파일을 살리고싶으면 --mixed나 --soft옵션을 사용하면 되는데 이때 stage(커밋 대기 저장소)에 보존하고 싶으면 --soft, modified상태로 두고 싶으면 --mixed(기본) 옵션을 사용하면 됩니다.

 

--hard 옵션은 파일이 보존되지 않고 바로 이전 Commit의 상태로 이동하기때문에 사용할때, 파일이 유실될수 있으므로 주의해서 사용하셔야 합니다.

 

저는 git reset HEAD^ => 잘못 수정한 파일 변경후 다시 git add => git commit 이런 순서로 잘못된 커밋을 수정하는데, 어떤 옵션을 사용하든 정확하게 이해하고 사용하면 안전하게 COMMIT을 취소하고 수정할 수 있습니다. 

 

하지만 만약 서버에 push해서 올라갔다면 상황이 복잡해지기 때문에 이에 대한 내용은 git push 취소하기라는 글을 하나 더 올릴 예정입니다.

 

아래는 실습해본 내용입니다.

 

 

 

 

 

 

 

 

 

참고 ) 

gmlwjd9405.github.io/2018/05/25/git-add-cancle.html

 

 

 

 

반응형