_

Always be tactful

성장 과정/개인 프로젝트

실수를 통해 성장하는 개발자가 되자 (rebase? cherry-pick?)

tact 2025. 4. 20. 04:20

커밋 메시지 실수

어제 오랜 시간 작업하다 보니, 커밋 메시지를 일관되게 작성하지 못 했다.

문제의 커밋은 아래 이미지를 통해 볼 수 있다.

커밋에 있어서 정말 신경 써서 남기고 있었는데, 한 커밋에서 대문자로 시작한 걸 미처 인지하지 못 한 채 병합까지 해버렸다. 슬픈 사실은 이미 PR 날리고 병합까지 하고 나서야 이 사실을 알게 되었다는 것이다.

 

사실, 이미 push 한 상태에서 해당 커밋을 수정한다는 게 얼마나 위험한 일인지는 알고 있다.

 

그리고 본 프로젝트를 시작할 때 다짐했던 것이 개인 프로젝트지만 협업처럼 작업하자는 것이었기 때문에, 모순되는 행동일 수도 있지만 수정하고 싶은 욕구를 이겨내지 못 하고, 마침내 일을 저지르게 되었다.

git rebase -i HEAD~10
물론 아무 생각 없이 시도한 것은 아니다.
이건 엄연히 개인 프로젝트고, 절대 충돌하지 않을 것이라는 걸 알기 때문에 진행해 보았다.

 

지금이 아니라면 언제 해보겠는가. (긍정적으로)

이론상으로만 알고 있는 것보다 직접 부딪혀 느껴보는 것도 좋다고 생각한다.

 

git log 따서 문제의 커밋이 헤드로부터 몇 번째인지 계산하고, git rebasereword 설정해 문제의 단어인 'Update'를 'update'로 바꾸었다.

 

이 과정에서 insert로 편집 모드에 진입할 수 있고, Esc로 나올 수 있다는 것도 확실히 알게 되었다.

(참고로, :wq는 저장 및 종료 명령어다.)

안타까운 점은 develop 브랜치에서는 원하던 대로 성공적인 메시지 수정이 이루어졌지만, 이미 날린 PR과 해당 PR을 병합하며 기록된 main 브랜치의 기록은 수정되지 않는다는 것이다.

그래서 이런 우스운 꼴이 되어버렸다.

 

하드 리셋 때리고 --force 하는 방법으로 어떻게든 되돌려 보려고 했지만 안 되는 건 안 되는 거더라.

*이것도 협업이었다면 당연히 하지 않았을 시도였다.


[2025-04-20 수정]

develop 브랜치를 merge 하는 과정에서 치명적인 오류가 발생하여 배포에 문제가 생겼다. 테스트를 똑바로 안 하고 냅다 merge 한 탓이다. 개인 프로젝트기에 하드 리셋을 통해 쉽게 해결했지만, 협업에서는 절대 있을 수 없는 해결법이다. 이번 실수를 마지막으로 다시는 이런 일이 발생하지 않도록 주의해야겠다.


기능별 브랜치 증발

- [x] 스크롤 위치 저장 및 복원 기능 추가
- [x] 빌드 최적화 및 유지 보수성 향상 (Vite + TypeScript)
- [x] 기존 빌드 시스템에서 발생하던 오류 해결

 

이번 develop 브랜치에 묶여 병합된 작업들이다.

 

나는 분명 첫 글에서 예고했던 것처럼, develop 브랜치를 분기해 feature/scroll-sync, feature/vite-setup으로 기능별 브랜치를 따 작업했다. (언제든 기능별 브랜치 히스토리를 추적하고 싶었다.)

 

로컬에서 작업별 커밋을 마치고, 최종적으로 기능별 브랜치를 develop에 merge 해 원격으로 push 했는데 이상하게도 브랜치가 증발했다.

 

찾아보니, 더 이상 필요 없어진 브랜치가 자동으로 삭제되도록 설정되어 있을 확률이 높다고 하는데, 이것저것 다 확인해 보았지만 명확한 근거는 찾지 못 했다.

 

로컬 저장소라도 잘 유지했으면 다행인데, git rebase를 실험하며 로컬 저장소를 지웠다가 원격으로 다시 clone 하는 과정을 몇 번 거친 뒤라 희망조차 없다.

 

야심 차게 시작한 프로젝트가 마음처럼 되지 않는다.

그렇지만 어쩌겠는가.

 

덕분에 로컬 저장소의 중요성과 브랜치의 소중함을 느꼈다.

홀로 기획하고, 홀로 개발하며, 홀로 리뷰하고, 홀로 병합하는 과정에서 팀의 필요성을 느꼈다.

 

그거면 됐다.

혼자 하는 프로젝트기에 실수해도 좋다. 다만 실수에서 그치지 않고 항상 깨달음을 얻자.


[2025-04-20 수정]

develop 브랜치에서 분기한 feature/scroll-sync, feature/vite-setup 브랜치를 재생성해 git cherry-pick으로 해결할 수 있을 듯하다. 높은 확률로 충돌이 발생하겠지만, 본 목적이었던 기능별 브랜치 히스토리를 추적할 수 있게 만드는 것은 가능할 것으로 보인다.


생각하지 못한 곳에서 이슈가 발생해 너무 많은 시간을 투자했다.

2일 뒤, 경영학부 전공 시험... 😢