작업 중 불필요한 커밋을 만들게 된 경우, 그 커밋들을 하나의 커밋으로 찌그러트릴(squash) 수 있다.
주의: 다른 사람과 이미 공유한 git 히스토리는 변경하면 안된다!
이미 push한 커밋의 히스토리를 변경하면
다른 사람은 pull이 안되거나, pull 한 이후 diff가 없는 파일이 conflict에 연이어 나타난다거나 등의 알쏭달쏭한 현상으로 고생할 수 있다.
git rebase
이 명령은 커밋 히스토리를 변경해준다.
git rebase 명령을 사용해 최근 3개의 커밋을 병합하는 예를 보자.
git rebase -i HEAD~3rebase: 커밋 히스토리를 변경-i:--interactive즉 터미널을 띄워서 컨트롤HEAD~3: 가장 앞선 커밋(HEAD)부터 3개 커밋을 선택
위 명령을 실행하면 아래처럼 에디터 창에 최근 3개 커밋이 표시된다.
pick <commit-hash-1> Commit message 1
pick <commit-hash-2> Commit message 2
pick <commit-hash-3> Commit message 3
기본으로 모든 커밋이 pick 상태로 시작한다. pick은 커밋을 남겨두는 것을 의미한다.
아래처럼 첫 커밋만 pick(또는 p만 써도 됨) 남기고 나머지는 squash(또는 s)로 변경한 후 저장한다.
pick <commit-hash-1> Commit message 1
squash <commit-hash-2> Commit message 2
squash <commit-hash-3> Commit message 3
새 창에서 커밋 메시지를 입력하면 커밋이 1개로 병합된다.