Git과 CLI (6) - CLI로 rebase 하기
리베이스 사용하기 이전 장의 3-way 병합을 하면 병합 커밋이 생성된다. yegang@yegangs:~/hello-git-cli$ git log --oneline --all --graph -n4 * 65352c8 (HEAD -> feature1) Merge branch 'master' into feature1 |\ | * ef34ef4 (origin/master, master, hotfix) hotfix 실습 * | 247cb34 새로운 기능 1 추가 |/ * db8ebff (tag: v0.1) mybranch1의 두 번째 커밋 병합 커밋이 생성되면 지저분해질 수 있으므로, 트리를 깔끔하게 하고 싶다면 Rebase(재배치) 할 수 있다. Rebase의 원리를 살펴보면 아래와 같다. HEAD와 대상 브랜치의 공통 조상을 찾는다 공통 조상 이후에 생성한 커밋들을 대상 브랜치 뒤로 재배치한다. 예를 들어 위 git log를 확인해보면, ef34ef4 (hotfix) 의 조상은 db8ebff (tag: v0.1) 이다. 그렇다면 병합 커밋을 만드는 대신에 247cb34 뒤로 재배치하는 것도 가능했을 것이다. 다만 이렇게 리베이스를 하는 것에 장점만이 있는 것은 아니다. 재비치된 커밋은 커밋 체크섬이 바뀌기 때문이다. rebase 명령어는 로컬 브랜치를 깔끔하게 정리하기 위함이고, 원격에 Push한 브랜치를 rebase하는 경우 다른 사용자가 혼란을 겪을 수 있으니 적절하지 않다. 우선 이전의 병합 커밋ㅇ르 되돌리고 rebase 해 보겠다. feature1 브랜치를 한 단계 되돌리기 위해 git reset --hard 명령어를 사용해 보겠다. 우선 feature 로 체크아웃한다. yegang@yegangs:~/hello-git-cli$ git checkout feature1 Switched to branch 'feature1' 다음으로 하드리셋을 실행한다. 여기서 HEAD~ 는 HEAD에서 한 칸 전이라는 뜻이다.(HEAD~...