본문 바로가기
Git

[총정리] Git commit 취소 & 깃허브 커밋 삭제 방법

by 푸드듥 2022. 5. 24.
반응형

작업 중 git commit을 했는데 이를 취소하고 싶다면?

다양한 상황에 맞게 커밋을 취소하는 방법을 알아보자.

1. 아직 원격 저장소(깃허브)로 Push를 하지 않은 경우

(1) 최신 커밋 취소하기

이 명령어를 쓰면 최신 커밋을 취소하고 이전의 커밋으로 돌아갈 수 있다.

즉, 만약 그동안의 커밋 내역이 "1번째 커밋 > 2번째 커밋 > 3번째 커밋" 이었다면,

이 명령을 한 뒤에는 커밋 내역이 "1번째 커밋 > 2번째 커밋" 로 돌아가는 것이다.

아래 세 가지 방법 중 어느 것을 써도 상관 없다.

//방법1
$ git reset HEAD~

//방법2
$ git reset HEAD~1

//방법3
$ git reset HEAD^

 

<커밋 취소 시 어느 시점으로 돌아갈지 정하기>

하나의 커밋을 만들 때는 ①변경사항을 만들고 ②add를 하고 ③commit을 하는 단계를 거친다.

그렇다면 커밋을 취소하는 것은 이 중 어디까지 취소를 하는 것일까?

직접 정해줄 수 있다!

 

①번까지 모두 취소: 커밋을 취소하고, 모든 변경사항을 다 없애버린다. (완전한 초기화)

$ git reset --hard HEAD~

 

②번까지만 취소: 커밋을 취소하고, add한 것도 없던 일로 한다. (위에서 설명한 방법)

$ git reset HEAD~

 

③번만 취소: 커밋만 취소하고, add한 파일들은 그대로 둔다. (딱 커밋만 취소하기)

$ git reset --soft HEAD~

 

 

(2) 여러 개의 커밋 취소하기

만약 최신 1개의 커밋이 아니라, 여러 개의 커밋을 취소하려면

다음과 같이 개수를 명시해주면 된다.

//최신 2개의 커밋을 취소
$ git reset HEAD~2

 

 

※ Tip 1

커밋이 잘 취소되었나 궁금하다면, 커밋 목록을 확인해 볼 수도 있다.

취소 전후로 아래 명령어를 입력해보자.

//커밋 목록 확인
$ git log

 

그동안의 커밋 내역이 주르륵 뜰 것이다. 취소한 뒤에는 최신 것이 사라져 있을 것이다.

참고로 엔터 등 아무 키나 누르면 더 옛날 내역도 나온다.

창을 빠져나오려면 "q"키를 누르면 된다.

 

 

2. 이미 원격 저장소(깃허브)로 Push를 한 경우

로컬 저장소(내 컴퓨터)에서만 커밋을 삭제하는게 아니라

이미 깃허브 저장소에 푸시해버린 커밋을 취소하고 싶다면?

방법이 두 가지가 있다.

 

방법1. 커밋 기록을 아예 지우는 방식

첫 번째 방법은 위 1번의 명령어로 로컬 저장소(내 컴퓨터)에서 커밋을 취소한 뒤에,

이를 강제로 원격 저장소(깃허브)에 푸시하는 방법이다.

그럼 원격 저장소에도 새 커밋 히스토리가 반영된다.

 

커밋을 취소한 뒤에 아래 명령어를 입력하자.

//원격 저장소에 반영하기
$ git push -f origin main

 

참고로 깃허브에 이미 심어진 잔디에는 영향이 없는 것 같다.

잔디를 없애고 싶은 사람은 별로 없지만.. 없애고 싶을 때는 좀 답답하긴 하다.

 

방법2. 취소했다는 기록을 남기고 취소하는 방식

첫 번째 방법이 최신 커밋을 아예 없던 일로 만들어 버린다면,

두 번째 방법은 커밋 취소했음! 하는 기록을 남기고 취소하는 방식이다.

 

즉 최신 커밋에 해당하는 내용은 이전으로 되돌리되, 커밋 내역은 건드리지 않고

취소한 내용으로 새로운 커밋을 만든다.

만약 팀 프로젝트를 하고 있다면 이렇게 기록을 남겨야 팀원들이 혼란이 없을 것이다.

$ git revert HEAD

 

※ Tip 2

git revert를 했다가 취소하려면? 또 git revert를 하면 된다.

 

 

반응형

댓글