Git을 잘 써보자- 11. git 수정(2) - git rebase

아래 내용은 Pluralsight의 Master Git, 누구나 이해할 수 있는 Git 입문, 생활코딩 지옥에서 온 Git의 내용을 토대로 정리한 내용입니다.

1. git rebase

1.1 git rebase 옵션 없이 수행

  • git rebase :
    • 옵션 없는 git rebase를 수행하면 아래의 예제를 를 수행하면, 아래쪽 스크린샷과 같이 변경된다.
    • 원격에 push 된 커밋 로그상에 (origin/master)라고 표기된 그 이 후에것 들이 하나의 라인으로 조정되며 합쳐진다.

    10-1

    10-2

    • git rebase 명령어 도중 충돌이 나면 도중 중단이 되고 아래와 같은 메세지가 나온다.

    10-3

    • git status 명령어로도 충돌된 파일을 확인할수 있다.
    • 해당 소스를 소스 충돌을 해결하고 저장한 후 git add 해당소스 해당 소스를 저장한다.
    • 저장한 후 git rebase --continue 명령어를 입력하면 중단되었던 rebase가 재개된다.

1.2 git rebase -i

  • git rebase -i :
    • 옵션의 i는 interactive의 약자이다.
    • 구체적인 수행방식을 지정할 수 있다.
      • pick : 해당 커밋을 이용한다.
      • reword : 해당 커밋을 이용하고, 메세지를 변경한다.
      • edit : 해당 커밋을 이용하고, 커밋을 수정한다.
      • squash : 해당 커밋을 이용하고, 이전 커밋과 합친다.
      • fixup : squash와 같지만, 이 커밋 로그 메세지는 버린다.
      • exec : 쉘을 이용한 명령을 수행한다.
      • drop : 커밋을 삭제한다.
    • 라인의 위치를 아래쪽 스크린샷과 같이 변경할 수도 있다.(맨마지막 커밋이 두번째 줄로 변경하였다.)
    • 원하는 방식대로 수행방식을 저장하고 빠져나오면 rebase가 수행된다.

    10-4

    10-5

    • 하나씩 수행되면서 squash 옵션을 사용한 경우 아래와 같이 합쳐지며 커밋 메세지도 합쳐지고 메세지 수정창이 나온다.

    10-6

    • 하나씩 수행되면서 reword 옵션을 사용한 경우 메세지만 수정할 수 있게 창이 뜬다.

    10-7

    • 충돌이 난 경우 1.1 git rebase 에서와 똑같이 충돌을 해결하고 git add 한 후 git rebase --continue 를 수행하면된다.

    • edit 옵션의 경우도 rebase 도중에 빠져나오게되며 아래와 같은 메세지가 나온다.
    • 원하는 파일을 추가 또는 수정 해주고 git commit --amend 진행 후 git rebase --continue 하게되면 나머지 rebase가 진행된다.

    10-9

    • 최종 rebase가 완료된 이후 모습이다.

    10-8

  • 최근 몇 개의 commit 을 수정할 때
$ git rebase -i HEAD~<갯수>