git rebase -i
커맨드로 해당 커밋 합치기git cherry-pick
으로 main
브랜치에 필요한 커밋만 부분합병(?)하기필자는 백준으로 알고리즘 문제를 푼 뒤, 백준허브라는 크롬 익스텐션을 사용해 깃허브 저장소로 결과를 전송한다. 거기서 끝내지 않고 다른 코드를 보고 분석해 깃허브 저장소에 푸시되는 README.md 파일에 기록해놓는다. 그런데 내 제출 페이지를 방문할 때마다 백준허브가 활성화되면서 README.md 파일을 다시 푸시하면서, 이전해 기록해놓은 자료들이 사라져버린다. 이런 현상을 알아차리고 나서 내 제출 페이지를 방문할 때마다 일일이 복사해서 다시 붙여놓고 다시 커밋, 푸시해야 하는게 여간 번거로운 일이 아니다. 어떻게해야 효율적으로 백준허브 저장소를 관리할 수 있을까?
문제를 풀면 깃허브 저장소에 해당 파일들이 푸시되고, 이를 git pull origin main
커맨드로 로컬 저장소로 가져올 수 있다.
그 중 분석하고 싶은 문제에 해당하는 브랜치를 생성하고 해당 브랜치로 이동한다. 필자는 git switch -c
커맨드를 사용한다. 이후 README.md 파일을 수정하고 커밋한다.
git rebase -i
커맨드로 해당 커밋 합치기이 때, 여러개의 커밋이 발생할 수 있다. 한번에 코드 분석을 마치기는 만만하지 않다. 그리고 커밋하지 않으면 다른 브랜치로 이동하기 번거로워진다. 일단 부분적으로 완성된 부분을 커밋한 후 나중에 git rebase -i HEAD~{합칠 커밋 개수}
명령을 사용하여 합칠 수 있다. 다만 이 방법으로는 연속하는 커밋만 합칠 수 있어, 해당 브랜치 내에서는 다른 작업을 하지 않는 것이 좋다.
먼저 합칠 커밋 개수를 확인하자:
예시의 경우 3개이므로 git rebase -i HEAD~3
명령을 수행한다.
아래와 같은 화면이 뜰 것이다:
위와 같은 화면에서 가장 오래된 커밋을 제외한 나머지의 커밋에서 pick
을 s
로 바꾼다. s
는 squash의 약자이다. 저장후 다음 페이지에서 커밋 메세지를 적을 수 있다.
git log --oneline
커맨드를 통해 확인 할 수 있다. 커밋 id를 복사해놓자.
git cherry-pick
으로 main
브랜치에 필요한 커밋만 부분합병(?)하기다시 main
브랜치로 돌아가 git cherry-pick {커밋 id}
명령을 입력하면 해당 내용을 main
브랜치로 가져올 수 있다. git push -u origin main
명령으로 마무리한다.
Before:
After:
작업 완료 후 브랜치명 변경:
앞으로 백준허브가 내 저장소의 내용을 덮어 쓸 경우, 해당 브랜치로 이동하여 커밋 id를 복사한 뒤 cherry-pick하여 해당 부분만 덮어쓸 수 있다.