Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

한밤의 리베이스 실패기 본문

😾 Git & Github

한밤의 리베이스 실패기

Chamming2 2021. 5. 25. 01:18

저희 산학프로젝트 팀은 깃과 깃허브를 통해 프로젝트 기록을 관리하고 있습니다.

그런데 어느 날 커밋 로그를 확인해 보니...

어흑 마이 깟...

아뿔싸! 뭔가 엄청난 일이 일어났음을 직감했습니다.

아무래도 팀원이 작업을 하면서 수정사항이 생길 때마다 커밋을 남겼고, 이걸 그대로 푸시해 머지한 듯 했습니다.

 

저도 커밋 템플릿을 완벽하게 지키고 있지는 않아 평소에는 별 생각없이 넘기곤 했지만, 이번에는 약 15건의 커밋 메시지가 의미없이 중복되고 있어 개선이 필요하다고 생각했습니다.

커밋의 은탄환, 리베이스

그래서 이번 기회에 커밋도 정리할겸, 평소에 잘 활용할 기회가 없던 인터렉티브 리베이스를 연습해보기로 했습니다.

  • 인터렉티브 리베이스 커맨드
git rebase -i HEAD~(헤드 포인터로부터의 거리)
// Ex. 최근 5개의 커밋을 리베이스할 때
// git rebase -i HEAD~5

위 명령어를 입력하면 지정한 커밋 개수만큼 커밋 기록이 출력되는데요, 인터렉티브 리베이스를 활용하면 커밋 기록(코드 변경사항, 커밋 메시지), 커밋 순서를 바꿀 수도 있고, 여러 커밋을 하나로 묶는 것도 가능합니다.

이번에는 저 15개의 "Update user~~" 커밋을 하나로 묶어서 깔끔하게 만드는 것이 목표인 만큼, squash 커맨드를 활용해 커밋을 하나로 묶어 보겠습니다.

squash 명령어를 활용해 커밋을 하나로 묶기

pick : 아무것도 안함 / edit : 커밋 정보 수정 / squash : 커밋 압축

위에서 인터렉티브 리베이스 명령어를 입력하니 커밋 목록이 촤르륵 나타났는데요, 이제 이 커밋을 하나로 묶을 차례입니다.

커밋 순서는 오래된 순서대로 ef85b88, d8244dc, 904f230 ... 1da83d3(최신) 인데요, 최신 커밋만을 pick 으로 두고 하나로 묶을 나머지 커밋들의 커맨드를 "squash" 로 바꿔줍니다. 

b351158번은 압축한 커밋들의 정보를 담고 있는 새로운 커밋입니다.

그 결과 15개의 커밋을 b351158번 커밋 하나로 압축할 수 있었습니다.

커밋 다이어트 성공!

이렇게만 보면 성공인 것 같지만, 이제 이걸 원격 저장소의 마스터 브랜치에 병합해야 합니다. 그러나...

대  실  패 ❗️

분명 로컬에서는 커밋 히스토리가 압축된 것처럼 보였지만, 원격 저장소에는 오히려 새로운 스쿼시 커밋이 추가되고 기존 커밋들은 압축되지 않은 모습입니다.

😇 띠로리...

이렇게 된 이유는 사실 힌트가 있었는데요, 리베이스 과정을 다시 짚어보면 최신 커밋(1da83d3)에 기존 커밋들을 추가해 하나로 만드는 것이 아니라, 15개의 커밋을 하나로 묶은 완전히 새로운 커밋(b351158)을 생성하는 것을 확인할 수 있었습니다.

그래서 결론은?

결론은 이미 원격 브랜치에 푸시한 커밋에 대해서는 스쿼시를 통해 해결할 수 없다고 판단해 결국 기존 브랜치를 폐기하고 새로운 브랜치에 커밋 내용을 옮겨 해결할 수 있었습니다.

그리고 이번 한밤의 사투를 통해 두 가지 새로운 점을 알 수 있었습니다.

  1. 인터렉티브 리베이스로 squash를 수행하면, 결과물(압축한 커밋)은 완전히 새로운 커밋이 된다.
  2. 머지는 항상 신중히! - 마스터 브랜치에 병합한 이상, 이후에는 할 수 있는 것이 별로 없다!

그럼, 모두들 즐거운 하루 보내세요!

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆