ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #6 팀플과 협업을 위한 git/github - 커밋의 활용 reset, revert
    git/팀플과 협업을 위한 git 시리즈 2021. 8. 25. 20:26

    앞서 commit 을 하고 push까지 해보았다.

    그럼 이 커밋을 도대체 어떻게 활용할 수 있을까?

     

    커밋은 버전의 상태를 기록해놓는다.

    즉 커밋되어 있는 버전으로 다시 되돌아 가는 것이 가능해진다.

     

    여기에서 사용되는 것이 바로 reset 과 revert다.

     

    지금까지 진행했던 사항이다.

    여기서 reset 과 revert를 사용해보자.

    일단 콘솔 환경에서 먼저 보여준 후, GUI 에서 사용해보도록 하겠다.

     

    실습을 위해 다음과 같은 파일을 만들고 push를 하자.

     

    push를 한 후에,

    이렇게 다섯번째 커밋을 준비중이었다고 가정하자.

     

     

     

    우리는 5번째 커밋을 작성하던 도중에,

    시니어 엔지니어가 4번째 커밋에 심각한 버그가 있다고 코드 리뷰를 해주었고,

     

    우리는 이 심각한 버그를 없애기 위해

    "third commit"으로 돌아갈 예정이다.

     

     

    일단 git log 를 하면, 지금까지의 커밋 내역을 확인할 수 있다.

    $ git log

    눈썰미가 좋았던 분들은 커밋 메시지마다 hash 값이 있음을 확인했을것이다.

     

    이 고유한 hash 값들은 해당 커밋의 주소를 나타낸다.

    우리가 해당 커밋에 볼 일이 있을 때, 저 hash 값을 이용해서 해당 커밋에 접근하면 된다.


    기본적인 reset 의 문법은 다음과 같다.

    reset 은 soft, mixed, hard 라는 옵션을 사용한다.

    git reset [옵션] [commit의 hash값]

     

     

     

    그럼 third commit 으로 돌아가기 위해 먼저 reset --soft 부터 사용해보자.

    위와같이 third commit으로 되돌리면, 현재 내 버전은 third commit 을 가르키고 있다.

    앗! 그러면 설마 열심히 작성중이던 5번째 커밋 내용도 날아가버린건가?

     

    다행이 그대로 남아있다.

    soft 옵션은 위와 같이 해당 커밋과 관련된 파일이 아니라면, 작업하던 파일은 그대로 유지된다.

    심지어 버그가 있던 해당 파일(코드)도 남아있다.

     


    그렇다면 hard 옵션도 한 번 사용해보자.

    reset 당한 커밋의 해시값으로 다시 reset --soft 해주면 된다.

     

    다시 처음 상태로 돌아왔다.

     

    이제 hard reset을 해보겠다.

    버그 파일과, 작업중이던 다섯번째 커밋도 날아갔다.

    soft가 해당 커밋 버전을 가리키기만 했다면,

    지금 내가 가지고 있었던 파일에도 변화가 일어났다.

     

    버그파일이 없어졌고,

    심지어 다섯번재 커밋도 날아갔다.

     

    이렇기 때문에

    reset --hard 는 정말 조심해서 사용해야한다.

     


    자, 그럼 되돌린 저장소를 push를 하게 되면 어떻게될까?

     

    push를 할 때 github 클라우드에 있는 소스파일보다 이전 버전을 사용하고 있다면서 push가 안된다.

    즉, github 입장에서는 버전을 지워버리는 일이기 때문에 이 방법을 지양한다.

    물론 git push -u 옵션을 통해 강제로 밀어버리는 수가 있지만,

    버전관리의 본질에서 벗어나기 때문에, 이렇게 하면 나중에 더 큰 이슈를 가져올 수 있다.

     

    그러면 어떻게 해야 버전관리의 본질을 지키면서 이전 파일을 수정할 수 있을까?


    여러가지 해결 방법이 있겠지만, revert가 앞의 문제를 해결해준다.

     

    revert는 해당 커밋의 "커밋 직전"으로 되돌아가고, revert 자체가 커밋으로 남는다.

     

    일단 GUI 를 통해 다시 버그파일이 있던 시점으로 돌아가자.

    (지금까지의 험난했던 과정들이 머릿속을 스쳐간다 ㅋㅋ)

     

     

     

    앞서 말했지만, 우리가 revert로 4번째 커밋을 넣으면,

    4번째 커밋을 하기 직전으로 되돌아간다.

    즉 3번째 커밋으로 돌아간다.

     

    $ git revert [커밋 hash값]

     

    이렇게 revert를 사용하면,

    커밋 메시지를 작성하라면서, GNU nano라는 창이 뜬다.

    그냥 텍스트 에디터인데, 처음 사용한다면 쉽지 않을 것이다.

    그냥 기존 내용들을 다 지워버리고,

    "return to third commit"을 입력하고 ctrl + X 를 눌러 저장 후 빠져나간다.

     

     

    그러면 버그 파일이 빠진 3번째 커밋으로 돌아간 것을 확인할 수 있다.

     

    가장 중요한 것은, 4번째 커밋(버그파일)도 기록에 남는다는 것이다.

    reset을 사용했을때는, reset을 사용했다는 사실을 본인만 알게 된다.

    그리고 만약 그 버그가 있던 순간으로 되돌아가고 싶다고 했을때 불가능하다.

     

    revert의 차이점은, 되돌린 커밋 조차 기록한다는 것이다.

     

    push 하고 끝내자 :)

    댓글 0

Designed by Tistory.