Git & Github

[ Git & Github ] Rebase 사용을 인한 PR 에 중복된 커밋

쉽코기 2022. 2. 27. 19:53

1. 상황  [ rebase 하고 중복 커밋이 이력에 남음 ]

 

 

Rebase 를 하고 PR 을 보내는 와중에 아래와 같이 중복된 커밋을 마주 하게 되었다.

 

1.  branch step1 을 작업하고 upstream에 PR 을 보냈다.

2.  PR 을 보내고 step1 에서 따낸 step2 , step3 , step4 에서 추가 작업을 진행했다.

3.  step1의 작업이 upstream 에 머지되고 upstream을 fetch 하고 그 위에 rebase 를 했다.

 

그리고 리베이스한 브랜치를 푸쉬하는순간!

바로 풀 먼저 당기라는 문구를 접하게 되었다.

 

"

hint: Updates were rejected because the tip of your current branch is behind

hint: its remote counterpart. Integrate the remote changes (e.g.

hint: 'git pull ...') before pushing again.

hint: See the 'Note about fast-forwards' in 'git push --help' for details.

"

 

 

 

2.  원인 파악

 

문제는 여기서 pull 을 받은 것이다.

rebase 를 로컬에서 먼저 진행했으니 원격과 달라지는 것은 당연한 결과였다.

이미 해당 브랜치는 원격저장소에 푸쉬되 었고 로컬에서 리베이스를 통해 이력이 바뀌었다.

pull 을 받으면 rebase로 인해 이사갔던 커밋들과 원격에 있던 커밋은 다르게 취급되어 중복 커밋이 발생하게 된 것이다.

 

3. 해결 방법

 

해결방법은 force push 입니다.

처음에는 push -f 를 치는 것이 겁났지만 다음 같은 상황에서는 사용해야합니다.

 

로컬에서 재배치한 작업을 원격 저장소에 force push 를 하는 것으로 예쁜 커밋 이력을 볼 수 있습니다. 

 

 

아래는 그림은 rebase 상황을 해당 사이트에서 시뮬레이션 한 것입니다.

git 이 익숙하지 않으시다면 해당 사이트가 도움이 될 것 같습니다.

https://learngitbranching.js.org/?locale=ko 

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org