아마 개별로 혹은 팀 단위로 프로젝트를 진행하면서 가장 많이 쓰는 명령어는 다음 다섯가지일 것 같습니다.
git add .
git commit -m "message"
git push origin branch
git pull origin main
git merge main
작업을 하는 feature/... 브랜치에서 merge를 진행하면 보통 main 브랜치로 병합이 되는데요.
배포를 해야하는데 feaure/... 브랜치에서 버그나 오류를 확인하지 않았다면 어떨까요..?😂
이런 문제점을 방지 하기 위해 git merge 이전 단계에 git rebase라는 명령어를 사용합니다.
main 브랜치에 merge 하기 전 작업 브랜치의 모든 commit들을 하나의 commit으로 만들고 하나의 PR 묶음으로 바꾼다!!!
git add 작업파일
git commit
git rebase -i main
다음 명령어를 통해 여러 커밋을 하나로 squash
할 수 있는데요
아래 사진과 같은 에디터 창에서 가장 윗부분 커밋만 남겨두고,
모두 pick → s로 바꿔줍니다.
수정했다면 :wq
로 저장 후 종료합니다.
2번 과정을 마치면 새로운 에디터 화면이 나타나는데요
현재까지 작성한 커밋 메시지가 모두 보입니다.
필요한 하나의 메시지만 남겨두고 모두 지워줍니다. 다음과 같이:
수정했다면 :wq
로 빠져나와줍니다!
git push origin "branch-name"
만약 이전에 해당 branch에서 push
한 이력이 남아있다면 다음과 같은 명령어를 볼 수 있을 텐데요.
git은 history가 다른 branch의 push
를 허용하지 않습니다.
그렇기 때문에 -f
옵션을 사용하여 force push
를 진행해주면 됩니다.
git push origin "branch-name" -f
※ Case By Case
rebase의 sync를 맞추기 위해 pull 명령어 이후에 push하는 경우도 있습니다.
우선 merge
명령어를 사용했을 때 git flow는 다음과 같습니다:
작업 브랜치가 main에 통합되면서 작업 내역이 flow 사이사이에 위치하게 되는데요
작업 내역이 브랜치 구분없이 시간별로 통합되어 작업 이력을 확인하기 어렵고 복잡해 보입니다.
rebase
명령어를 사용했을 때 git flow는 다음과 같습니다:
어떤가요?
가장 아래있는 작업 브랜치가 모두 모여 정리가 되고 있습니다.
브랜치를 모두 통합했을 땐 다음과 같은 그래프를 보실 수 있을 것입니다!
어떤가요?
브랜치별로 커밋 내용이 정리되어 작업 이력을 확인하기 훨씬 용이해진 것 같습니다.
conflict 해결 요청
작업 브랜치에서 rebase 명령어를 통해 push를 한 이후 conflict
가 발생하는 경우가 있습니다.
당황하지 말고 해당 브랜치로 이동해줍니다!
merge 명령어를 사용할 땐 아래 명령어를 입력할 것입니다:
git merge main
하지만!! 이번엔 rebase 명령어를 사용해보겠습니다:
git rebase -i main
이후 다시 squash
하는 에디터가 나타날 것이고, 다시 commit을 줄여주면 됩니다.
그 이후에
code .
명령어로 VS코드 에디터를 열어보면 conflict가 발생한 파일을 확인할 수 있을 것입니다.
conflict를 해결하였다면, 다음 명령어를 사용하여 다시 push
를 해주세요.
git add 변경작업파일
아래 명령어 통해 commit별 conflict 해결
git rebase --continue
만약 conflict를 해결할 사항이 더 이상 없으면
rebase가 되고 update가 되었다!
라는 영어 메시지를 볼 수 있을 것입니다.
rebase를 마치고 conflict를 해결하였다면 다시 push를 진행해주면 됩니다.