본문 바로가기
카테고리 없음

[Git] 최근 로컬 커밋 되돌리기(undo local commits on git)

by HarryJang 2023. 9. 13.

목차

    개요

    개발자로 살아가다 보면 Github 나 Gitlab과 같은 버전 컨트롤 시스템을 사용하게 된다. 거기엔 커밋(commit)이라는 것이 있다. 프로젝트가 진행됨에 따라 그 진행 상황의 스냅샷을 찍는 것과 같다. 현재 파일들의 모습을 메시지와 함께 저장해 놓는 것이다.

     

    이 글에서는 실수로 잘못된 커밋을 했을 때 이를 되돌리는(지우는) 방법을 알아보겠다.

    커밋 되돌리기

    $ git commit -m "실수로 올린 잘못된 커밋"
    ----------------------------------------------------
    $ git reset HEAD~
    [ 파일 고치기 ]
    $ git add .
    $ git commit -c ORIG_HEAD

    위 커멘드를 통해 커밋 실수를 지울 수 있다. 

    커멘드 설명

    git reset HEAD~

    실수로 올린 커밋을 지우는 커멘드이다. 파일은 건드리지 않고 가장 최근 커밋을 지운다. 해당 파일들은 나중에 다시 add 한 뒤에 커밋해야한다.

    git add .

    새로운 커밋에 포함하고 싶은 파일들을 add 해준다. ('git add.'는 마지막 커밋 다음에 변화된 모든 파일을 add 한다).

    git commit -c ORIG_HEAD

    이전 커밋 메시지로 새로운 변화를 커밋한다. reset을 사용했을 때 이전 헤드를 ORIG_HEAD에 복사해 둔다. 이전 헤드가 어떤 커밋이었는지는 git log를 사용해서 origin/HEAD 인 커밋을 찾으면 알 수 있다. 소문자 -c flag는 에디터를 열어 이전 커밋의 메시지를 편집할 수 있게 해준다. 대문자 -C flag 는 편집 없이 이전 커밋 메시지를 사용하여 변화된 파일들을 커밋한다.

    마무리

    git 은 개발자로서 필수적으로 사용할 수밖에 없는 도구이다. 많이 사용하며 살아가지만 어떻게 작동하는지에 대한 제대로 된 이해 없이 add, commit, push를 반복하며 사용할 때가 많다. 그러다 보니 문제가 생겼을 때 고치다가 뭔가 잘못되지 않을까 손을 떨며 작업하게 된다. 필자가 적은 글 또한 모든 상황에서의 해결책이 아니다. 각자의 상황에 따라 제대로 문제를 해결하기 위해서는, git 이 어떻게 작동하는지에 대해 큰 틀에서라도 공부를 하는 것이 좋은 자산이 될 것이라 생각한다. 오늘도 git에서 발생한 예상치 못한 문제로 골머리 앓고 있는 개발자들에게 심심한 위로를 전한다.