Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

코딩하는 바나나

10. Git rebase 본문

Git

10. Git rebase

유기농바나나칩 2022. 8. 17. 11:45

rebase는 merge와 그 기능이 같다. 한 브랜치에서 다른 브랜치로 합치는 기능을 한다. 하지만 그 결과가 조금 다르다, 

먼저 앞서 배웠던 merge의 경우 3-way-merge를 할 경우 새로운 커밋이 생기며 브랜치가 합쳐진다.

merge

그러나 rebase를 할 경우 이 보다 커밋 기록을 조금 더 깔끔하게 할 수 있다. 

더보기

$ git checkout experiment

$ git rebase master

$ git checkout master

$ git merge experiment

이와 같이 명령을 하면 먼저 두 브랜치의 공통 커밋인 C2로 이동해 현재 브랜치인 experiment의 가장 최근 커밋인 C4까지 diff를 만들어 임시로 저장하고 experiment를 master가 가리키는 커밋을 가리키게 하고 임시로 저장한 변경사항을 저장한다.

rebase

그 후 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