git

git commit 순서 바꾸기

탄생 2022. 3. 19. 16:03

● 순서 바꾸는 이유

프로젝트 개발을 진행하다 개발계에서 운영계로 배포 시 특정 대상들만 배포를 해야 하는 경우가 발생하였다.

git cherry-pick 을 이용할 수도 있지만 중간 중간 선택해서 배포를 해야 하기 때문에 어느부분까지 배포되었는지 기억을 해줘야 한다. git의 순서를 변경하여 배포를 진행한다면 조금 더 깔끔하게 브랜치를 관리할 수 있다.

 

예를 들어 본다면

왼쪽과 같이 commit 내용이 있다.

이번 운영에 A,B,C 기능을 배포하려고 했지만 A기능에 이슈가 발생하여 배포에서 제외하기로 했다.

그렇다면 배포시 A를 제외해야 하는데 cherry-pick을 이용할 경우 A가 배포된 브랜치의 맨 마지막에 위치하게 되어 배포된 브랜치와 분리가 이루어져서 관리가 이루어져야 한다.

 

● 참고 URL

개인적인 이야기를 하다 내용이 길다면 참고 url을 참고하시기 바랍니다.

https://minsone.github.io/git/git-reorder-commit

 

● 커밋 순서 변경

B와 C의 commit을 변경하여 commitC에서 배포 브랜치를 만들어 배포한다면 더 깔끔하게 브랜치 관리를 할 수 있다.

 

1. rebase를 이용하여 순서 변경하기 (git rebase --interactive )

commitA를 맨 위로 올릴 것이며 rebase시 commitA의 직전 주소(9ff7167)을 입력한다.

// git rebase --interactive ${수정할 커밋 직전 주소} or git rebase --i ${수정할 커밋 직전 주소}
git rebase -i 9ff7167

 

2. commit 순서 변경하기

git rebase -i 9ff7167 를 입력하면 위처럼 커밋 순서가 나오게 된다.

vi에디터를 이용하여 순서를 변경 후 저장하면 된다.

i를 눌러 에디터 모드에서 순서를 변경해줘도 되지만 잘라내기(dd)와 복사(p)를 이용하면 더 쉽게 가능하다.

B -> C -> A 로 커밋 순서를 변경하였다(아래로 내려갈수록 최신 commit)

3. 저장

:wq 로 vi를 저장한다면 커밋 순서가 변경된 것을 볼 수 있을 것이다.

이제 commitC에서 배포용 브랜치를 생성하여 배포하면 브랜치가 좀 더 깔끔하게 관리될것이다.

 

 

 

 

 

4. 충돌 발생

만약 충돌이 발생한다면 커밋별 충돌을 해결후 rebase를 계속 진행하면 된다.

rebase 과정에서 소스 충돌이 이루어졌고 두개의 충돌을 모두 해결하면 순서가 변경이 된다.

git rebase --continue

// rebase를 중지하려면 abort한다.
git rebase --abort