코딩하는 바나나
10. Git rebase 본문
rebase는 merge와 그 기능이 같다. 한 브랜치에서 다른 브랜치로 합치는 기능을 한다. 하지만 그 결과가 조금 다르다,
먼저 앞서 배웠던 merge의 경우 3-way-merge를 할 경우 새로운 커밋이 생기며 브랜치가 합쳐진다.
그러나 rebase를 할 경우 이 보다 커밋 기록을 조금 더 깔끔하게 할 수 있다.
$ git checkout experiment
$ git rebase master
$ git checkout master
$ git merge experiment
이와 같이 명령을 하면 먼저 두 브랜치의 공통 커밋인 C2로 이동해 현재 브랜치인 experiment의 가장 최근 커밋인 C4까지 diff를 만들어 임시로 저장하고 experiment를 master가 가리키는 커밋을 가리키게 하고 임시로 저장한 변경사항을 저장한다.
그 후 master로 이동해 experiment를 fastfoward해주면
브랜치를 나눈적 없는 것 처럼 깔끔하게 커밋기록을 유지 할 수 있다.
이 처럼 merge와 rebase를 한 결과 코드는 동일하다.차이점은 단지 커밋 히스토리에 있다. 보통 리모트 브랜치에 커밋을 깔끔하게 적용하고 싶을 때 사용한다.
Reabase 활용
위의 상황에서 client 브랜치를 server브랜치는 그대로 두고 client브랜치만 합치고 싶은 경우 rebase를 활용 하면된다.
$ git rebase --onto master server client
위의 명령은 master브랜치 부터 server브랜치와 client브랜치의 공통 조상 커밋을 client브랜치에서 없애고 client브랜치를master브랜치에 합친다.
여기서 server브랜치를 master에 합치는 것은 위의 rebase하는 법 과 같다. git checkout server, git rebase master를 하면되는데 다음 명령을 실행하면 checkout 없이 한번에 할 수 있다.
$ git rebase master server
Rebase의 위험성 데인저러스
rebase를 사용할때의 주의사항이 있다.
이미 공개 저장소에 push 한 커밋을 rebase 하지 마라
rebase는 기존의 커밋을 그대로 사용하는 것이 아니라 내용은 같지만 다른 커밋을 새롭게 만드는 것이다. 내가 다른 사람이 작업하던 내용을 pull 받고 작업하던 중 해당내용을 다른 사람이 rebase한다면? 내가 다음에 다시 pull 받았을 때 커밋이 엄청 꼬일 것이다. 그래서 rebase를 사용하려면 먼저 rebase를 하고 push를 해야한다.
다른사람이 만약 리모트 저장소에 공유된 내용을 rebase했다면 git pull --rebase 혹은 git fetch후 git rebase origin/브랜치를 해주면 된다.
'Git' 카테고리의 다른 글
9. Git 리모트 브랜치 (0) | 2022.08.16 |
---|---|
8. Git 브랜치 머지는 머지? (0) | 2022.08.14 |
7. Git 브랜치란? (0) | 2022.08.14 |
6. Git Alias (0) | 2022.08.14 |
5.Git 리모트 (0) | 2022.08.14 |