안녕하세요!
Git 명령어 종합 연습문제 첫번째 시간입니다.
그럼 시작 하겠습니다.
로컬에 쌓인 커밋들
개발 중에 종종 이런 상황이 생깁니다: 눈에 잘 띄지 않는 버그를 찾아서 해결하려고, 어떤 부분의 문제인지를 찾기 위해 디버그용 코드와 화면에 정보를 프린트하는 코드 몇 줄 넣습니다.
디버깅용 코드나 프린트 명령은 그 브랜치에 들어있습니다. 마침내 버그를 찾아서 고쳤고, 원래 작업하는 브랜치에 합치면 됩니다!
이제 bugFix브랜치의 내용을 main에 합쳐 넣으려 하지만, 한 가지 문제가 있습니다. 그냥 간단히 main브랜치를 최신 커밋으로 이동시킨다면(fast-forward) 그 불필요한 디버그용 코드들도 함께 들어가 버린다는 문제죠.
여기에서 Git의 마법이 드러납니다. 이 문제를 해결하는 여러가지 방법이 있습니다만, 가장 간단한 두가지 방법 아래와 같습니다:
git rebase -i
git cherry-pick
대화형 (-i 옵션) 리베이스(rebase)로는 어떤 커밋을 취하거나 버릴지를 선택할 수 있습니다. 또 커밋의 순서를 바꿀 수도 있습니다. 이 커맨드로 어떤 작업의 일부만 골라내기에 유용합니다.
체리픽(cherry-pick)은 개별 커밋을 골라서 HEAD위에 떨어뜨릴 수 있습니다.
명령어: git rebase -i HEAD~3 or git rebase -i c1
위의 화면에서 c2와 c3를 체크해제 하여 아래 화면처럼 c4만 rebase 해준다.
밑에 화면 처럼 bugFix에 c4'가 rebase 되었다.
명령어: git rebase bugFix main
위의 명령어를 통해서 main브랜치를 bugFix브랜치가 있는 곳으로 rebase 하였다.