혼자 적어보는 노트

[Git] rebase -i를 이용한 커밋(commit) 삭제/수정/병합/분할 본문

기타

[Git] rebase -i를 이용한 커밋(commit) 삭제/수정/병합/분할

jinist 2022. 2. 7. 02:52

프로젝트를 작업하다 보면 과거의 커밋들을 수정해야 할 때가 있다.

 

rebase -i를 통한 과거의 commit 삭제/수정/병합/분할 하는 방법에 대해 알아보자.

 

아래에 예제를 위한 테스트 commit을 만들어 보았다.

λ git log --oneline
672b32f (HEAD -> main) 로그인 에러 수정, 회원가입 기능 추가
2670e3a 로그인 기능 추가 완료
362e466 로그인 기능 작업 진행
b2155d3 메인 슬라이드 추가ㅏ
6080ad8 지워도 되는 커밋
9fa6e95 메인메뉴 추가

 

해야할 작업은 아래와 같다.

 

6080ad8 지워도 되는 커밋 ────────── 삭제

b2155d3 메인 슬라이드 추가ㅏ ──────── 오타 수정(커밋 메세지 수정)

2670e3a 로그인 기능 추가 완료   ─┬───── 두 커밋 병합
362e466 로그인 기능 작업 진행   ─┘

672b32f 로그인 에러 수정, 회원가입 기능 추가 ─ 두 개의 커밋으로 분할

 

 

reabse -i

 

여러 커밋을 수정하기 위해 현재 커밋에서 부터 어떤 커밋까지 rebase할 지 정해주어야 하는데

기준이 되는 커밋의 이전 커밋의 해시를 적어주어야 한다,

git rebase -i [커밋 해시]

//예시
get rebase -i 9fa6e95

 

명령어를 입력하면 위와 같은 에디터 창이 열리는데

커밋해시 앞의 키워드를 수정함으로써 커밋들을 수정할 수 있다.

 

 

p, pick : 그대로 둘 커밋

r, reword : 커밋 메세지 변경

e, edit : 커밋 수정

d, drop : 커밋 삭제

s, squash : 이전 커밋과 병합

 

 

해당 키워드에 맞게 커밋 해시 앞의 키워드를 수정해 준 후 저장 후 닫으면

차례대로 에디터창이 나타난다.

 

 

1. 삭제

삭제의 경우 에디터 편집 이동 없이 바로 진행된다.

 

 

2. 커밋 메세지 수정

위의 커밋 메세지를 수정하고 저장 후 닫으면

바로 다음 수정할 에디터가 나타난다.

 

3. 이전 커밋과 병합 + 커밋 메세지 수정

위의 커밋 메세지 중 하나를 지우고

아래와 같이 수정할 메세지를 적어준다

 

4. 두 개의 커밋으로 분할

키워드 e로 저장 후 닫으면 에디터 편집 창 없이 해당 커밋의 위치로 이동이 된다.

 

λ git log
commit edb8915c28e76ad30d127d90ac37cbba705b4bd1 (HEAD, main)
Author: jinist94 <325days@naver.com>
Date:   Mon Feb 7 01:47:53 2022 +0900

    로그인 에러 수정, 회원가입 기능 추가

git log를 이용해 현재 위치를 확인해보면

현재 커밋은 최상단의 커밋이기 때문에 원래의 HEAD의 위치와 같지만

중간에 위치한 커밋일 경우 해당 위치로 이동된다.

git reset HEAD~

default값인 mixed를 이용하여 작업내용들을 working directory로 되돌려 주면서

현재위치의 커밋을 지워준다.

 

git status를 입력하여 상태를 확인하면서

각각의 파일을 add해주면서 따로 커밋을 해주면 된다.

로그인 에러 수정에는 login.txt파일을 add, commit,

회원가입 기능 추가에는 join.txt파일을 add, commit 해 준다.

git add login.txt
git commit -m "로그인 에러 수정"

git add join.txt
git commit -m "회원가입 기능 추가"

커밋을 나누어서 추가하였어도 아직 rebase상태이기 때문에

아래의 명령어로 rebase를 종료해준다.

git rebase --continue

 

 

이제 log를 확인해보면 원하던대로 커밋이 정리가 된 것을 확인할 수 있다.

λ git log --oneline                                                                                                                                                                                      
2fbf95d (HEAD -> main) 회원가입 기능 추가
6fa1e39 로그인 에러 수정
d43df8f 로그인 기능 추가
6cbd417 메인 슬라이드 추가
9fa6e95 메인메뉴 추가
c32a1be FIRST COMMIT
Comments