Skip to main content

[git rebase] 깃, 과거 커밋 삭제하기


git을 사용할때 과거의 커밋을 삭제하는 방법이며, 이때 변경이력은 삭제가 된다.

2번 커밋과 3번 커밋 사이에 있는 커밋을 삭제할때를 기준으로 설명

image



1. 해시값 확인하기

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

예시에서는 2번 커밋의 해시값을 입력해준다.

git rebase -i 해시값


2. 커밋 확인 후 삭제

삭제하고 싶은 커밋에 커서를 놓고 dd를 입력하여 한 줄을 삭제하고 :wq를 입력하여 빠져나온다.면 된다. (또는 pick -> drop으로 변경해도됨)

예시에서는 wrong 커밋에 커서를 놓고서 dd를 입력하여 삭제한다.

image



3. rebase 진행

아래 명령어를 이용하여 리베이스를 진행하고, 충돌이 일어나면 (git add, git rm, 파일 수정 등으로) 충돌을 해결해주고 다시 리베이스를 진행한다.

git rebase --continue
git add
git rm


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. 결과

정상적으로 wrong 커밋이 삭제된 것을 볼 수 있다.

image