git rebase 실습

Kay·2020년 3월 11일
0

git merge VS git rebase


이미지 출처 : https://git.logikum.hu/tutorials/merge-rebase/upstream-changes

git rebase를 이용하면 merge commit이 생기지 않으며, master branch의 이력을 깔끔하게 관리할 수 있다. 또한 squash를 이용해 개발 과정 중에 발생하는 여러 개의 커밋을 하나로 압축하여 master branch에 올릴 수 있다. 단, merge와 비교하였을 때, conflict를 해결하는 과정이 다소 복잡하다. merge commit이 생기지 않기 때문에 merge 이전으로 되돌리는 git revert를 사용할 수 없다.

1.

특정 branch에서 작업한 commit이 쌓이면, master branch에서 git pull origin master로 먼저 master branch를 업데이트 해준다.

2.

작업하던 branch로 돌아와 git rebase -i master 를 입력한다.
'-i' 옵션을 주면 interactive mode로 진입하여 좀더 편리하게 rebase를 진행할 수 있다.

화면에 내가 커밋한 수 만큼 pick으로 시작하는 커밋넘버와 커밋메세지가 여러 줄 보여지는데, 이때 남기고 싶은 커밋을 제외하고 pick을 s로 바꿔주면 squash 할 수 있다.

conflict가 발생하면, 해당 파일을 열어 comflict를 해결한 뒤 git add 로 추가해준다.
git rebase --continue 명령어를 입력하여 rebase와 conflict 해결 과정을 반복한다.

마침내, commit message를 수정할 수 있는 화면이 표시되면 이 모든 과정이 끝났음으로 'This is the 1st commit message:' 다음에 정성스럽게 commit message를 작성한 뒤 저장, 종료한다.

3.

tig 로 rebase가 잘 진행되었는지 확인해본 뒤, 작업하던 브랜치의 원격 브랜치로 push 후 pull request를 작성하면 끝.

덧.
git rebase --abort : rebase 중단
git push origin 'my branch name' -f : 이미 원격 브랜치에 푸시한 커밋을 rebase해서 다시 푸시하는 경우 -f 옵션으로 푸시해야 정상적으로 푸시 됨. 단, force push는 본인이 작업한 브랜치에만 해야하며, master 브랜치나 다른 사람의 브랜치에 푸시하면 절대 안되므로 꼭 주의할 것.

profile
new blog✨ https://kay-log.tistory.com/

0개의 댓글