ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • git rebase 명령어 실험
    Today I Learned 2022. 9. 17. 23:40

     

    git rebase 명령어를 실습해보다 생긴 의문점을 해결하는 과정에서 배운 내용들을 정리했다.

     

     

    약간 특수한 상황의 git rebase 시도 

    git rebase를 공부하면서 브랜치의 분기와 merge를 반복하는 과정에서 몇 번의 충돌을 일부러 발생시킨 브랜치를 조상 브랜치가 분기하는 특정 지점으로부터(ex. upstream/main)로부터 선형으로 재구성되도록 rebase 명령을 수행해보는 실험을 했다.

     

    기존 브랜치에서 충돌이 발생하기는 했었지만, 충돌을 해결하여 merge를 시켜주었기 때문에 어떤 중간 과정 없이 rebase가 바로 수행 완료될 것이라고 예상했다. 그러나 그 충돌이 발생한 지점에서 rebase가 중단되는 이슈가 있었다. 해당 이유가 궁금하여 트레이너님께 문의를 드렸다. 트레이너님의 설명을 정리한 내용은 다음과 같다.

     

    rebase는 그 대상이 되는 브랜치의 커밋들을 하나씩 '복사'해서 내가 지정한 특정 커밋 지점으로부터 시작해서 하나씩 이어붙이는 과정을 거치게 된다.

     

    기존 브랜치에서는 merge된 커밋들이라도 다시 순서대로 가져와 이어붙이는 과정에서 충돌이 다시 발생하게 되므로, 충돌이 일어난 부분을 어떻게 merge했는지 정해주는 과정이 필요했다. 이때 기존의 merge 결과와는 다른 선택을 할 경우에는 어떤 작업이 진행될지 궁금했는데, 놀랍게도 선택한 내용을 바탕으로 rebase 작업이 계속해서 진행되는 것을 확인했다. 

     

    모든 rebase 작업을 마친 뒤의 HEAD의 상태는 rebase를 시작하기 전 HEAD의 상태와 같았지만, rebase를 마치고 나면 기존 브랜치는 삭제되므로 rebase를 하는 과정에서 기존의 커밋 내용이 유실될 수 있겠다는 생각이 들었다.

     

    추가적으로 interactive rebase에 대한 부분도 설명을 들을 수 있었다. git rebase -i HEAD~[rebase하기 원하는 커밋의 개수] 명령으로 실행할 수 있는데, 기존 커밋들의 커밋 메세지를 수정하거나, 이전 커밋과 합치거나, 커밋을 삭제시키는 등 커밋 내역을 관리하기 위해 rebase를 사용할 수도 있다는 점을 알 수 있었다. 예를 들어 rebase -i 명령을 이용해 빈 줄 추가 같은 커밋을 이전의 커밋과 합치거나, 몇 부분으로 나눠서 커밋했던 커밋 내역을 하나의 커밋으로 합치고 커밋 메세지를 바꿀 수도 있다.

     

     

    실험의 결과를 새로운 실험으로 잇다

    rebase 실험을 진행하는 데 사용했던 브랜치는 merge와 merge 충돌에 대해 실험한 결과 브랜치를 이용했었던 실험이었다. 일반적으로 보이는 rebase의 예시들은 선형 상태의 브랜치를 rebase시키는 예시가 대부분이었는데, 마침 해당 브랜치가 스터디에서 사용하는 upstream/main보다 뒤쳐진 지점에서 분기하고 있던 상황이여서 시작 지점을 맞춰줄 필요가 있었고, 그 과정에서 rebase 실험을 다소 특수한 환경에서 진행할 수 있었다.

     

    작은 것들을 실험한 결과가 있었기에 그로부터 한 단계 더 나아간 실험을 해볼 수 있었다는 생각이다. 예전에 트레이너님께서 이야기해주셨던 '내가 확실하게 통제할 수 있는 것들을 만들고, 그것들로부터 통제할 수 있는 범위를 조금씩 확장시켜 나간다'는 말의 의미를 조금은 더 깨달은 기분이다.

     

     

     

    댓글

Designed by Tistory.