일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- HTML
- react
- kubernetes
- next.js
- k8s
- 타입스크립트
- 리액트
- 이더리움
- 파이썬
- TypeScript
- 가상화
- 이슈
- AWS
- 프론트엔드
- 클라우드
- BFS
- CSS
- 웹
- 자바스크립트
- 블록체인
- 솔리디티
- es6
- 알고리즘
- node.js
- 쿠버네티스
- 컴퓨터공학
- JavaScript
- 백준
- 백엔드
- docker
- Today
- Total
즐겁게, 코드
한밤의 리베이스 실패기 본문
저희 산학프로젝트 팀은 깃과 깃허브를 통해 프로젝트 기록을 관리하고 있습니다.
그런데 어느 날 커밋 로그를 확인해 보니...
아뿔싸! 뭔가 엄청난 일이 일어났음을 직감했습니다.
아무래도 팀원이 작업을 하면서 수정사항이 생길 때마다 커밋을 남겼고, 이걸 그대로 푸시해 머지한 듯 했습니다.
저도 커밋 템플릿을 완벽하게 지키고 있지는 않아 평소에는 별 생각없이 넘기곤 했지만, 이번에는 약 15건의 커밋 메시지가 의미없이 중복되고 있어 개선이 필요하다고 생각했습니다.
커밋의 은탄환, 리베이스
그래서 이번 기회에 커밋도 정리할겸, 평소에 잘 활용할 기회가 없던 인터렉티브 리베이스를 연습해보기로 했습니다.
- 인터렉티브 리베이스 커맨드
git rebase -i HEAD~(헤드 포인터로부터의 거리)
// Ex. 최근 5개의 커밋을 리베이스할 때
// git rebase -i HEAD~5
위 명령어를 입력하면 지정한 커밋 개수만큼 커밋 기록이 출력되는데요, 인터렉티브 리베이스를 활용하면 커밋 기록(코드 변경사항, 커밋 메시지), 커밋 순서를 바꿀 수도 있고, 여러 커밋을 하나로 묶는 것도 가능합니다.
이번에는 저 15개의 "Update user~~" 커밋을 하나로 묶어서 깔끔하게 만드는 것이 목표인 만큼, squash 커맨드를 활용해 커밋을 하나로 묶어 보겠습니다.
squash 명령어를 활용해 커밋을 하나로 묶기
위에서 인터렉티브 리베이스 명령어를 입력하니 커밋 목록이 촤르륵 나타났는데요, 이제 이 커밋을 하나로 묶을 차례입니다.
커밋 순서는 오래된 순서대로 ef85b88
, d8244dc
, 904f230
... 1da83d3
(최신) 인데요, 최신 커밋만을 pick 으로 두고 하나로 묶을 나머지 커밋들의 커맨드를 "squash" 로 바꿔줍니다.
그 결과 15개의 커밋을 b351158
번 커밋 하나로 압축할 수 있었습니다.
이렇게만 보면 성공인 것 같지만, 이제 이걸 원격 저장소의 마스터 브랜치에 병합해야 합니다. 그러나...
대 실 패 ❗️
분명 로컬에서는 커밋 히스토리가 압축된 것처럼 보였지만, 원격 저장소에는 오히려 새로운 스쿼시 커밋이 추가되고 기존 커밋들은 압축되지 않은 모습입니다.
이렇게 된 이유는 사실 힌트가 있었는데요, 리베이스 과정을 다시 짚어보면 최신 커밋(1da83d3
)에 기존 커밋들을 추가해 하나로 만드는 것이 아니라, 15개의 커밋을 하나로 묶은 완전히 새로운 커밋(b351158
)을 생성하는 것을 확인할 수 있었습니다.
그래서 결론은?
결론은 이미 원격 브랜치에 푸시한 커밋에 대해서는 스쿼시를 통해 해결할 수 없다고 판단해 결국 기존 브랜치를 폐기하고 새로운 브랜치에 커밋 내용을 옮겨 해결할 수 있었습니다.
그리고 이번 한밤의 사투를 통해 두 가지 새로운 점을 알 수 있었습니다.
- 인터렉티브 리베이스로 squash를 수행하면, 결과물(압축한 커밋)은 완전히 새로운 커밋이 된다.
- 머지는 항상 신중히! - 마스터 브랜치에 병합한 이상, 이후에는 할 수 있는 것이 별로 없다!
그럼, 모두들 즐거운 하루 보내세요!
'😾 Git & Github' 카테고리의 다른 글
당신이 찾던 커밋 수정법, git commit --amend 사용하기 (0) | 2021.08.30 |
---|---|
git reset으로 스테이징과 커밋 되돌리기 (0) | 2021.08.22 |
깃허브 프로젝트에 라이센스 부여하기 (0) | 2021.05.04 |
github api 요청 한도 늘리기 (0) | 2021.02.26 |
좋은 커밋 메시지란 & 커밋 템플릿 만들기 (1) | 2021.02.22 |