Skip to main content

[git rebase] 깃, 과거 커밋 합치기


git을 사용할때 과거의 커밋을 합치는 방법이며, 변경이력이 하나의 커밋으로 합쳐지게 된다.

2, 3, 4번 커밋을 합칠때 기준으로 설명

image



1. 해시값 확인하기

합치고 싶은 커밋보다 이전 커밋의 해시값을 확인하고 아래 명령어를 입력한다. (첫번째 커밋을 포함하고 싶은경우 해시값 대신 --root 옵션 입력)

예시에서는 2, 3, 4번 커밋을 합치기 위해서 1번 커밋의 해시값 또는 --root를 입력한다.

git rebase -i 해시값


2. pick -> squash 수정

이후 vi에디터에 들어가지고, 변경할 커밋으로 가서 i를 눌러 입력모드로 진입 후, 합칠 커밋들 중 첫번째 커밋을 제외한 커밋들에 squash를 입력해주고 , esc => :wq => 엔터를 눌러 빠져나온다.

예시에서는 3, 4번 커밋 앞에 squash를 입력해주면 된다.

image



3. 커밋메세지 지정

커밋이 병합될때 커밋메세지는 합쳐지는 커밋들의 모든 메세지를 선택할 수도 있으며, 주석을 사용하여 합쳐지는 커밋들 중 하나 또는 일부의 메세지만 선택할 수 있다. 또는 모두 주석처리 하고 새 커밋 메세지를 작성해도 된다.

이후 esc => :wq => 엔터를 눌러 빠져나온다.

예시에서는 2번, 4번 커밋 메세지를 주석처리하고 3번 커밋메세지로 정함

image



4. COMMITTER_DATE 수정

정상적으로 리베이스가 끝났다면 COMMITTER_DATE를 수정한다.

깃허브에서는 커밋날짜 기준이 COMMITTER_DATE 기준으로 들어가기 때문에 AUTHOR_DATE로 덮어 씌어주어야 한다. (참고 : 깃, COMMITTER_DATE 변경하기)

git filter-branch --env-filter \
'if [ "$GIT_AUTHOR_DATE" != "$GIT_COMMITTER_DATE" ]
then
export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
fi'


5. 결과

정상적으로 2, 3, 4번 커밋이 합쳐진 것을 것을 볼 수 있다.

image



참고자료