ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2019.09.13] git rebase 사용법 - commit 상태를 변경시켜보자.
    개발 블로깅/기타 개념 2019. 9. 13. 22:17

    'git log' 명령어를 입력하면, 해당 프로젝트의 commit 내용들을 확인할 수 있다. 

     

    그러나 작업하는 도중, 과거에 커밋한 내용에 대해 수정할 내용(코드, 커밋 메시지)이 있으면, 해당 커밋으로 돌아가서 내용을 변경할 수 있다.

     

    # 첫번째 practice1.js 파일 생성

    현재 pratice1.js라는 파일을 새로 만든 후, 하나의 함수를 선언하고 '두 번째 commit'이라는 메시지로 commit을 하였다. 

     

    # 두 번째 practice2.js 파일 생성

    그리고, practice2.js 라는 파일을 하나 더 생성하여, '세 번째 commit'이라는 메시지로 commit을 한다.

     

    여기서, 내가 '두번째 commit'으로 남긴 commit 메시지 내용을 변경하고 싶으면 아래와 같이 한다.

     

    # git rebase 사용

    우선 변경할 commit의 이전 commit ID를 확인해야 한다.

    $ git log // git commit 확인

    우리는 '두번째 commit'의 메시지를 '다시 작성한 두번째 commit'이라는 메시지로 변경하고자 한다.

    그러니, 변경할 해당 커밋의 이전 커밋 ID를 git rebase 한다.

    $ git rebase -i f17f2a1 // '첫번째 commit' 메세지의 commit ID

    그러면 위 이미지와 같이 vi editor가 나타나게 된다.

    변경할 commit의 앞에 있는 pick을 reword로 변경하고 저장한다. 

    # vi editor에서 내용을 수정 후 저장하는 법

    1. insert모드로 내용을 수정하려면 키보드 i를 입력한다.
    2. 내용 수정 후 ESC키를 누르면 insert모드에서 빠져나온다.
    3. :(콜론) 입력 후, wq!(강제 저장 후 vi종료) 입력하고 엔터를 누른다.

    그러면 바로 메세지를 변경할 수 있는 vi editor 화면이 나온다. 

    아까 위와 같이 vi를 쓰는 방식으로, 변경할 commit 메시지로 수정 후 저장한다.

    메세지메시지 수정 후 저장을 하고, git log 명령어로 확인해보면, 해당 commit의 메시지가 변경된 것을 확인할 수 있다.

     

    # 해당 commit의 코드 내용을 변경

    이번엔 과거에 commit한 코드 내용을 변경해보자.

    아까 위의 commit 메세지를 변경할 때처럼, 변경할 commit의 이전 commit ID를 rebase 한다.

    똑같이 위 처럼 commit 내용들이 나오는 vi editor가 나온다.

    이번엔 수정할 commit 앞에 pick을 reword가 아닌 edit으로 변경하여 저장한다.

    edit으로 수정 후 저장하면, 해당 commit으로 checkout 상태가 된다.

    그러면 현재상태에서 변경하려 했던 내용으로 수정 후 저장한다.

    (여기서는 practice1.js파일 내 함수가 '더하기'를 했는데, 빼기로 변경하였다.)

    해당 practice1.js 파일을 수정하여 modified가 되었으니, 해당 내용을 commit --amend를 한다.

    $ git add .
    $ git commit --amend

    그러면 해당 commit의 메시지를 수정할 수 있는 vi editor가 나온다.

    메시지도 수정하고자 하면, 해당 화면에서 메시지를 수정 후 저장한다.

    (여기서는 '다시 작성하는 두번째 commit'메시지를, '한번 더 다시 작성하는...' 메시지로 변경한다.)

    수정된 commit 상태를, 기존의 제일 최신 commit까지 반영시키기 위해 git rebase --continue 명령어를 사용한다.

    $ git rebase --continue

    그러면 수정된 해당 commit 내용과 메세지가 최신 상태로 변경된 것을 확인할 수 있다.

     

    이렇게 기존에 적용했던, commit 내용을 원래 그랬듯이 수정을 할 수 있다. 

    (만약 github 등의 원격 저장소에 올린 후 rebase를 사용해 수정하면, 원격 저장소에는 변경된 내용으로 적용되지 않는다.

    대신 git force라는 commit 강제 적용 방법이 있는데, 이것을 쓰면, 해당 저장소를 공유하던 다른 개발자와 충돌이 날 수 도 있으니, 최대한 피하도록 한다.)

    반응형

    댓글

Designed by Tistory.