본문 바로가기
Git

[Git] 가장 최근 commit으로 되돌아가기

by holy_jjjae 2024. 1. 30.

Situation
Git에서 코드 작업하는중에 문제가 생겨서 가장 최근 커밋을 되돌려야 한다? 

마지막 커밋을 취소할 수 있는 두 가지 방법이 있습니다. 이 글에서는 이 두 가지를 모두 살펴보겠습니다.


revert 명령어

revert 명령어는 취소하고 싶은 특정 커밋의 내용을 되돌리는 새로운 커밋을 만듭니다. 이 명령어를 사용하여 다음과 같이 마지막 커밋을 되돌릴 수 있습니다:

git revert <되돌리고 싶은 커밋 이름>


git log를 사용하여 되돌릴 커밋의 이름을 찾을 수 있습니다. 여기에 설명된 첫 번째 커밋은 마지막으로 생성된 커밋입니다. 그런 다음, 찾아낸 영숫자 이름을 복사하여 revert 명령어에 사용할 수 있습니다.

(이 이미지에서 각 원은 하나의 커밋을 의미합니다.)


reset 명령어

reset 명령어를 사용해 마지막 커밋을 실행 취소할 수도 있습니다. 그러나 주의해야할 점은 커밋 기록이 변경되기 때문에 거의 사용하지 않아야 합니다. 작업 지점인 HEAD를 지정된 커밋으로 이동하고, 그 이후의 모든 항목을 폐기합니다:

git reset --soft HEAD~1

--soft 옵션은 커밋되지 않은 변경사항이 손실되지 않음을 의미합니다.

(마찬가지로 각 원은 하나의 커밋을 의미합니다.)

가장 최근 커밋으로 되돌리고 unstaged 상태의 변경 사항을 모두 제거하려면 --hard 옵션을 사용할 수 있습니다:

git reset --hard HEAD~1

 
이렇게 하면 최신 커밋뿐만 아니라 커밋되지 않은 변경 사항도 취소됩니다.

Q: Git에서 언제 reset 또는 revert를 사용해야 할까요?

되돌려야 하는 커밋이 로컬에만 존재하는 경우에만 reset 명령어를 사용해야 합니다. 이 명령어는 해당 커밋을 아예 삭제하고 커밋 기록을 변경하기 때문에 같이 협업하고 있는 다른 팀원의 작업에도 영향을 끼치기 때문입니다.
(협업하는 프로젝트 브랜치에 reset 을 실행하면 다른 팀원이 새로운 커밋을 push할 때 브랜치에 충돌이 납니다.)

revert는 변경 내용을 취소하는 새 커밋을 생성하므로, 되돌리려는 커밋이 이미 원격 저장소로 푸쉬된 경우에는 커밋 기록을 덮어쓰지 않는 revert 명령어를 사용하는 것이 가장 좋습니다.
 
출처 : https://www.freecodecamp.org/news/git-revert-commit-how-to-undo-the-last-commit/