본문 바로가기
개발툴

Git Rebase: 커밋 순서 변경과 합치기

by GangDev 2024. 3. 24.

 

git 의 rebase 명령은 브랜치에서 다른 브랜치로 커밋을 옮기거나, 커밋의 순서를 변경하는 등의 작업에서 사용된다.
주로 커밋 히스토리를 깔끔하게 관리하고자 할 때, 코드를 최신 상태로 유지하며 작업할 때, 다른 개발자들과 협업할 때 등에서 사용된다.

 

사용법 >>


브랜치 히스토리 변경 >>
feature 브랜치가 main 브랜치에서 분기되었다면, feature 브랜치에서 git rebase main 명령을 실행하면, feature 브랜치의 시작점을 main 브랜치의 최신 커밋으로 옮긴다.
이 과정에서 feature 브랜치의 커밋들이 새로운 기준점에서 다시 적용된다.
예시:

 

Main 브랜치: A -- B -- C
                             \
Feature 브랜치:    X -- Y -- Z

 

여기에서, Feature 브랜치에서 git rebase main 명령을 실행하면, Feature 브랜치의 커밋들(X, Y, Z)이 Main 브랜치의 최신 커밋(C) 위로 옮겨진다.

 

Main 브랜치: A -- B -- C
                                      \
Feature 브랜치:              X' -- Y' -- Z'

 

Feature 브랜치의 커밋들 (X', Y', Z')은 Main 브랜치의 최신 상태를 반영하게 된다.


커밋 합치기(squash) >>
여러 커밋을 하나의 커밋으로 합치고 싶을 때, rebase 를 사용할 수 있다.
프로젝트의 히스토리를 깔끔하게 유지하는데 도움이 된다.
예시:

 

Main 브랜치: A -- B -- C -- D
                              \
Feature 브랜치: X -- Y -- Z

 

여기에서, Feature 브랜치에서 'git rebase -i HEAD~3' 명령을 실행한다.
(Head~3 은 Feature 브랜치에서 마지막으로 3개의 커밋을 선택하겠다는 의미)
명령을 실행하면 편집기가 열리면서 다음처럼 된다.

 

pick X 커밋 메시지 X
pick Y 커밋 메시지 Y
pick Z 커밋 메시지 Z

 

커밋 합치기(squash)를 하기 위해 pick 을 squash 로 변경한다.

 

pick X 커밋 메시지 X
squash Y 커밋 메시지 Y
squash Z 커밋 메시지 Z

 

편집기를 종료하면 새로운 편집기 창이 열리면서 커밋 메세지를 편집할 수 있다. 합쳐진 커밋 메시지를 원하는대로 작성하고 저장한다.

그러면 다음처럼 git 구조가 변경된다.

 

Main 브랜치: A -- B -- C -- D
                             \
Feature 브랜치: X -- M

 

여기에서 M은 Y와 Z 커밋이 합쳐진 커밋을 나타낸다.
이렇게 여러 개의 커밋을 하나의 커밋으로 합쳐서, 프로젝트의 히스토리를 깔끔하게 유지할 수 있다.


커밋 순서 변경 >>
rebase를 사용하면 커밋의 순서를 변경할 수도 있다. 특정 커밋을 앞뒤로 재배치하는 데 사용된다.

 

Main 브랜치: A -- B -- C -- D
                             \
Feature 브랜치:     X -- Y -- Z

 

위 상황에서, Feature 브랜치에서 'git rebase -i HEAD~3' 명령을 실행한다.
(이전 예시처럼, HEAD~3 은 Feature 브랜치에서 마지막으로 3개의 커밋을 선택하겠다는 의미다)
명령을 실행하면 편집기가 열리며 다음처럼 나타난다.

 

pick X 커밋 메시지 X
pick Y 커밋 메시지 Y
pick Z 커밋 메시지 Z

 

원하는 순서로 커밋을 재배치한다. Y와 Z 커밋을 서로 위치 변경하려면 다음처럼 한다.

 

pick X 커밋 메시지 X
pick Z 커밋 메시지 Z
pick Y 커밋 메시지 Y

 

그리고 나서 편집기를 종료하면 커밋 순서가 변경된다.


변경된 커밋 순서 :

 

Main 브랜치: A -- B -- C -- D
                             \
Feature 브랜치:     X -- Z -- Y

 

여기에서 Y와 Z 커밋의 순서가 변경되어 Z가 Y 앞에 나타난다.
이렇게 하면 특정 커밋들의 순서를 변경할 수 있어서, 프로젝트의 히스토리를 원하는대로 재배치할 수 있다.

 

---

24년 1월 11일에 작성된 글입니다