여러 개의 커밋 합치기
비슷한 내용의 커밋이 중복되는 경우, 여러 개의 커밋을 하나로 합치고 싶을 때가 있다.
여러 개의 커밋들을 하나로 합칠 수 있을까?
How to do - git rebase 명령어를 이용
1 - 커밋 히스토리를 수정하기 위해 rebase 한다.
합치려고 하는 커밋들을 git rebase HEAD~<number of commits>
명령어로 rebase 한다.
rebase 명령어는 merge처럼 브랜치를 합하는 용도로도 쓸 수 있지만, merge와 다르게
커밋 히스토리를 수정하는 용도로도 사용 가능하다.
이 때 최근의 커밋 이력이 밑에 나오는 것에 주의.
2 - pick에 해당하는 내용을 squash로 바꾼다.
vi 에디터를 쓰고 있다면 :%s/pick/squash/g
명령으로 한 번에 변경할 수 있다.
이 때 합치려고 하는 커밋 메시지를 pick으로 남겨 놓는다.
3 - 해당 변경사항을 푸시한다.
git push --force
명령어로 덮어씌운다.
변경 사항 확인
그 외 rebase의 활용법
merge 이외에도 rebase를 커밋 히스토리 변경을 위한 용도로 간단하게 사용할 수 있다.
1 - rebase 한다.
git rebase -i <commit ID>
명령어를 이용
2 - 원하는 수정사항을 반영한다.
1) 2번째 커밋과 3번째 커밋의 순서를 바꾸고 싶으면 2번 라인과 3번 라인을 교체하면 된다.
2) 2번 라인의 커밋 메시지를 바꾸고 싶으면 2번 라인의 pick
을 reword
로 교체한다.
3) 2번 커밋을 삭제하고 싶으면 2번 라인의 pick
을 drop
으로 교체한다.
4) 2번 커밋의 커밋 내용 자체를 변경하고 싶으면 edit
으로 교체한다.
이외에도 커밋 히스토리를 변경하는 다양한 작업을 위한 명령어들이 있다.
3 - 필요한 경우
1) git rebase --continue
명령어로 rebase를 확정한다.
2) git rebase --abort
로 진행 중이던 rebase를 취소한다.
git-amend에 대해
더 간단하게 커밋 내역을 수정할 수 있는 방법으로 git-amend를 사용하는 방법이 있다.
1
2
| // npm을 사용한다면 아래 명령어로 간단하게 설치해 사용할 수 있다.
npm i git-amend -g
|
기존 커밋 내역의 날짜, 커밋 메시지 등을 변경하는 과정을 해당 명령어를 사용하여 간단하게 대체할 수 있다.
내역을 변경한 후 git push --force
명령어로 덮어씌워야 원격 리포지토리의 내역을 변경할 수 있다는 것은 동일하다.