본문 바로가기

웹 프론트엔드

[Git] cherry-pick을 이용하여 commit history 깔끔하게 정리하기

한 레포지터리에서 프론트엔드, 백엔드 폴더를 분리하여 공동 작업을 하고 있었다.

같은 기능을 동시에 개발하고 있어서, 백엔드 코드를 rebase 받아서 local에서 구동해보려고 했다.

 

그 과정에서 프/백 commit이 합쳐진 상태로 PR을 올리게 되었다.

 

즉,

1. 내가 작업하지 않은 커밋 또한 PR에 올라갔고,

2. 내가 백엔드 코드를 rebase한 시점 이후에 백엔드 코드가 수정되었을 경우, conflict가 예상되었다.

 

그러므로, 백엔드 commit history를 제거한 후, PR을 올리고자 했다.

 

그림으로 표현하면 다음과 같다.

아래처럼, 백엔드 코드가 사이에 끼어있어서, reset 할 수도 없는 상황이다.

현재 상황

 

위 상황을 아래와 같이 개선하고자 한다.

 

원하는 상황

 

해결 방법

1. base target branch에서 sub-feature2를 판다.

2. 필요한 커밋만 cherry-pick 한다.

3. sub-feature1으로 force-push 한다.

 

명령어로 정리하면 다음과 같다.

git checkout -b sub-feature2
git cherry-pick front-commit-1-hash
git cherry-pick front-commit-2-hash
git push origin sub-feature2:sub-feature1 -f

그림으로 정리하면 다음과 같다.

개선 상황