[Git] Interactive Rebase 실습
2021 오픈소스 컨트리뷰션 아카데미의 오픈소스 101 교육을 듣고 정리한 내용입니다.
1. commit 과거 시점으로 되감기(rewind), 풀기(continue)
체크 포인트를 만들어 과거의 commit으로 되돌아 갔다가 돌아오는 작업이 필요한 이유
✅ 과거에 작성했던 commit을 수정/삭제하기 위해서는 과거 시점으로 돌아가서 수정해야 한다. 그 돌아가는 과정이 rebase라고 보면 된다.
✅ 오픈소스 프로젝트에서는 내 PR에 대해 " 커밋 두개를 합쳐라, 커밋을 쪼개라, 몇 개는 메세지를 변경해라 " 등 세밀하게 리뷰를 받게 된다. 그때마다 과거로 돌아가 그 이후의 커밋을 모두 삭제하거나 새로 커밋을 쌓을 수는 없기 때문에 이런 Interactive Rebase 작업이 필요한 것이다.
✅ 특정 커밋 이후에 새로운 커밋 몇 개를 추가한 뒤 현재로 돌아오는 경우도 생길 수 있다.
1.1. rewind
git rebase -i --root
-
-i
는 interactive의 약자이고,--root
는 리와인드 범위를 전체 커밋으로 하겠다는 의미이다.-
git rebase -i HEAD~5
HEAD~5
는 리와인드 범위를 현재 HEAD를 기준으로 과거 5개 까지로 하겠다는 의미이다.
-
-
commit 의 "
pick
" 글자를 "edit
" 으로 수정하면, 과거 시점 commit에체크 포인트
를 만들 수 있다. -
만약 가장 오래된 커밋의 pick을 edit으로 수정한뒤
git log --oneline
으로 커밋 리스트를 확인해보면 커밋이 한 개였던 과거 시점으로 돌아갔음을 확인할 수 있다.
1.2. continue
git rebase --continue
체크 포인트
를 해제하는 명령어. 그러면 다시 원래 시점 (되감기 전)의 커밋으로 돌아올 수 있다.- 다시 commit, push 할 필요도 없다.
- 만약
체크 포인트
를 여러 개 만든다면?git rebase -i --root
로 각각 3, 5, 6번째 commit에체크 포인트
를 만든다면,--continue
할 때마다 3번째 commit, 5번째 6번째 commit으로 이동하고 마지막으로 --continue를 하면 최신 시점으로 돌아올 수 있다.
1.3. abort
git rebase --abort
- rebase 과정을 취소하려면 --abort 옵션을 사용
2. [실습] 커밋 로그의 두번째 commit 이후에 새로운 commit 3개 넣기
-
git rebase -i --root
명령어로 체크 포인트를 만들 커밋 목록을 확인한다.- 커밋 내역이 과거 순으로 나온다는 점 주의
- 확보하고 싶은 커밋 ID를
edit
으로 수정하는 점 주의 (두번째 커밋이 존재하는 시점으로 가고 싶다면 두번째 커밋 edit)
-
git log --oneline
명령어로 체크포인트 시점을 확인해본다. -
새로운 3개의 commit을 추가한 뒤
git rebase --continue
로 현재 시점으로 돌아온다. -
다시
git log --oneline
명령어로 중간에 새 커밋이 추가 되었음을 확인한다.- git log 명령어는 최신순으로 정렬된다.
3. [실습] 과거 commit 정보 삭제하기 (두 개의 commit을 하나로 합치기)
3.1. reset --soft
git rebase -i --root // 합쳐서 남길 커밋 HEAD를 edit 해준다.
git reset --soft HEAD~1
git commit --amend
git rebase --continue
reset
의--soft
옵션은 commit 정보만 삭제하고 파일의 변경분은 남겨둔다. 즉, 소스의 변화는 그대로 두고 커밋 두 개를 하나로 합칠 때 사용하는 것이다.- HEAD~1 은 현재 commit에서 과거로 하나까지를 의미한다.
- --amend 옵션으로 변경한 커밋을 적용하고, 현재 시점으로 돌아온다.
3.2. reset --hard
git reset --hard HEAD~1
은 최신 커밋 삭제뿐만 아니라 파일의 변경분도 완전히 삭제한다.
Author And Source
이 문제에 관하여([Git] Interactive Rebase 실습), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hidaehyunlee/Git-Interactive-Rebase-실습저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)