Git

여러 개의 커밋 합치기

Git 사용법

Posted by jopemachine on April 4, 2020 Updated on September 25, 2022

여러 개의 커밋 합치기

비슷한 내용의 커밋이 중복되는 경우, 여러 개의 커밋을 하나로 합치고 싶을 때가 있다. 여러 개의 커밋들을 하나로 합칠 수 있을까?


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번 라인의 pickreword로 교체한다.

3) 2번 커밋을 삭제하고 싶으면 2번 라인의 pickdrop으로 교체한다.

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 명령어로 덮어씌워야 원격 리포지토리의 내역을 변경할 수 있다는 것은 동일하다.

usage