아래 내용은 Pluralsight의 Master Git, 누구나 이해할 수 있는 Git 입문, 생활코딩 지옥에서 온 Git의 내용을 토대로 정리한 내용입니다.
1. git rebase
1.1 git rebase 옵션 없이 수행
git rebase
:- 옵션 없는
git rebase
를 수행하면 아래의 예제를 를 수행하면, 아래쪽 스크린샷과 같이 변경된다. - 원격에 push 된 커밋 로그상에 (origin/master)라고 표기된 그 이 후에것 들이 하나의 라인으로 조정되며 합쳐진다.
git rebase
명령어 도중 충돌이 나면 도중 중단이 되고 아래와 같은 메세지가 나온다.
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가 수행된다.
- 하나씩 수행되면서
squash
옵션을 사용한 경우 아래와 같이 합쳐지며 커밋 메세지도 합쳐지고 메세지 수정창이 나온다.
- 하나씩 수행되면서
reword
옵션을 사용한 경우 메세지만 수정할 수 있게 창이 뜬다.
-
충돌이 난 경우 1.1 git rebase 에서와 똑같이 충돌을 해결하고
git add
한 후git rebase --continue
를 수행하면된다. edit
옵션의 경우도 rebase 도중에 빠져나오게되며 아래와 같은 메세지가 나온다.- 원하는 파일을 추가 또는 수정 해주고
git commit --amend
진행 후git rebase --continue
하게되면 나머지 rebase가 진행된다.
- 최종 rebase가 완료된 이후 모습이다.
- 옵션의
- 최근 몇 개의 commit 을 수정할 때
$ git rebase -i HEAD~<갯수>