Important

  • 리베이스와 병합의 차이
  • git rebase
  • 리베이스를 쓰지 말아야 할 상황

 

* 리베이스? 병합?

협업 과정에서 각자 피처 브랜치를 이용해 작업하는것을 이제는 안다. 여기서 내 작업이 끝나기전에 누군가의 작업물이 메인 브랜치에 올라간 경우 변경사항을 최신으로 유지하기 위해서 나의 피처 브랜치에 pull을 해야 할 것이다. 이 때 병합 커밋이 필연적으로 발생할텐데 이런 경우가 아주 빈번하게 발생한다면 나의 작업과는 관계없는 병합커밋이 많이 생기게 되어서 이력이 지저분해 질 것이다.

 

병합(위), 리베이스(아래)

병합 대신 리베이스를 사용하면 피처 브랜치의 베이스를 새로 설정해서 일직선으로 만들어준다.

피처 브랜치의 커밋들을 그대로 다시 생성하면서 메인 브랜치의 끝 지점에서부터 배치한다.

 

병합 커밋이 사라지면서 이력이 깔끔해졌다

내가 작업하지 않은 병합 커밋들을 삭제하고 일직선으로 재배치 함으로써 이력이 보기 쉽게 되었다.

참고로 feat 브랜치의 커밋들은 재배치 되면서 커밋 해시가 변경된다.

 

 

* 리베이스를 하지 말아야 하는 경우

리베이스를 실행하는 경우 기존 커밋들이 재배치 되면서 커밋 해시가 변경된다고 했다.

그렇기 때문에 다른 개발자들이 이미 가지고 간 커밋을 리베이스하면 안된다.

피처 브랜치를 메인 브랜치로 푸시하고 병합히 된 후 누군가 메인 브랜치를 가져가서 해당 이력을 가지게 되었고 작업을 한다면 절대로 리베이스를 사용하면 안된다.

 

한줄로 정리할 수 있다. "이미 공유한 커밋을 리베이스 하면 안된다."

 

 

* 리베이스와 충돌

리베이스 도중 충돌이 발생한 경우 취소하고 이전으로 돌아가거나 충돌을 처리하는 방법이 있다.

충돌을 처리하는 방법은 병합과 비슷하다.

 

$ git add/rm <conflicted_files>
$ git rebase --continue

 

충돌이 발생한 파일을 처리한 후 스테이지에 올리고 리베이스를 계속 진행하면 된다.

 

 

리베이스는 유용한 기능이지만 사용하지 말아야 할 때를 정확히 알고 있어야 한다.

+ Recent posts