깃 리베이스는 커밋을 하나로 정리하여 서버 마스터로 푸시하기 위해 사용된다. 많은 인원이 한 프로젝트를 진행하다 보면 커밋,푸시 내역이 뒤엉켜 지저분한 모습이 되는데 rebase를 통하면 보기좋고 깨끗한 커밋내역을 확인 할 수 있게 된다.(쓸모없는 커밋메세지도 안써도 되고~)
git log
를 통해 작업중인 브랜치의 커밋 상태를 확인하자. 2개 이상의 커밋이 쌓였다면, rebase를 통해 정리를 한 뒤git checkout master
를 통해 나의 로컬 마스터브랜치로 이동
git pull origin master
를 통해 서버 마스터브랜치를 받아 로컬 마스터브랜치를 최신화한다.
git checkout 브랜치명
: 다시 작업중이던 브랜치로 이동
git rebase -i master
커밋을 수정하여 리베이스 진행하겠다.??????? 라고 명령어를 입력하고 나면 아래와 같이 터미널에 수정할수 있는 창이 열린다. 나는 여기서
pick 000000 해더 html/css완료
pick 000000 해더 클릭이밴트&드롭다운 온오프
// 이하 주석
중 pick을 스쿼시 해주기 위해 아래와 같이 pick을 s로 변경하여 첫 커밋 상태로 나머지를 squash하겠다고 지정하였고 한글로 적인 커밋 메세지 또한 1개 수정하여 작성하였다.
이후 에디터를 나오기 위해 esc > :wq
에디터 저장, 닫기!
리베이스 진행중 충분히 컴플릭트가 발생할수 있고, 커밋내역이 많을수록 컴플릭트가 많이, 반복적으로 같은 컴플릭트해결을 해야 하는 경우가 생기게 된다. 필연적! 컴플릭트 발생을 줄이고 효율적인 리베이스를 위해서는 2~4개의 커밋이 쌓였을때는 한번씩 리베이스를 진행하도록 하자.
conflict를 해결하고 나서는 주의 해야 할 것이 있다
충돌이 났을 경우 리베이스작업을 하기전에 충돌을 해결하게 된다. 충돌을 모두 해결하고 나면 미처 끝내지 못한 rebase 작업을 이어서 해야 하는데, 이때 명령어는 git rebase --continue
로 진행한다. 이후 진행은 3번 rebase의 설명을 따라 스쿼시(squash)작업을 한다.
Successfully rebased and updated refs/heads/.....
위 내용이 콘솔에 찍히면 완료
리베이스를 실행, squash(커밋내역 압축) 명령까지 마친 상태에서 log를 확인해 보자. 여러게 쌓여있던 commit이 1개로 수정된 것을 볼수 있을 것이다. 모든 커밋이 정리 되었으니 서버로 나의 커밋을 보내자.
git push origin feature/브랜치명
로 현재 완료한 기능의 커밋을 보내고 PR를 작성하면 된다.
만약 작업중 위와 같이 rejected
가 발생하면 --force
or -f
를 통해 force push 를 하게 된다.
위와 같은 상황은 이미 PR을 날린 상태일 때 발생한다고한다.. 사실 자세한 이유는 모른다. (아시면, 댓글감사합니다.) 1차 프로젝트 하면서 징하게 나왔던 화면인데 이런 이유였다!
git push origin 브랜치명 --force
를 통해 강제로 푸시를 진행한다. 하지만 꼭! force 명령어를 붙일땐 정말 이것을 올려도 문제가 없는지에 대해 꼭꼮꼭 !! 열번 확인하고 푸시하자!!