본문 바로가기

개발/GIT

깃 커맨드 합치기 (git rebase -i HEAD~3)

반응형

commit끼리 큰 변동사항이 없다거나, bug만 수정한 커밋을 추가한다거나 할 때

commit 여러개를 하나로 합치고 싶은 욕망이 생긴다! 🔥

 

이렇게 여러개의 commit을 하나로 합치는 데 사용하는게 git rebase 커맨드이다.

rebase에는 합치는 것 말고도 다양한 기능이 있는데, 커맨드를 합칠 때는 그 중 squash 옵션을 사용한다.

 

Command & Result

git rebase -i HEAD~(합치려는 커밋 수)
// editor에서 pick -> s로 수정 후 :wq 로 저장
// 합친 커밋의 커밋 메시지 적절히 수정

 

 

설명

 

아래 그림처럼 4개의 커밋이 있다고 하자.

 

git rebase -i HEAD~4

 

여기서 HEAD~ 뒤에는 합치려는 커밋의 수를 적어준다.

 

 

그럼 아래와 같은 화면이 나오는데, 이건 이 커밋들을 어떻게 수정 하고싶은데? 라고 물어보는 것이다. 

 

 

아래 설명에 보면 squash라는 command가 있다.

use commit, but meld into previoud commit.이 commit을 쓰긴 쓸건데 이전 커밋에 합쳐버릴래, 하는 뜻이다.

 

 

커밋은 가장 위에 있는게 가장 오래된 것이다.

아래에 있는 커밋들을 다 첫번째 커밋에 합칠 거니깐

아래 3개의 commit의 pick을 squash 또는 s로 수정해주고 esc + :wq 로 저장한다.

 

 


4개의 커밋이 합쳐진 커밋의 commit message를 수정하는 화면이 나오는데,
나는 보통 첫번째꺼만 남기고 다 삭제해버린다. 

 

이렇게 하면 깔끔하게 커밋이 하나로 합쳐진다.

 

! 만약 이미 origin에 일부 커밋을 push한 상황이라면)

origin에서 local이랑 버전을 맞출수가 없다며 push를 거부할 것이다.

이럴 때는 'local이 맞아!' 강력 주장해주기 위해

git push --force

--force 옵션을 주어 push를 하면 된다.
force 옵션을 줄 때는 항상 신중해야 한다. 그 사이에 그 브랜치에 다른 사용자가 커밋을 했다거나 하면, 얄짤없이 그 커밋은 날라가고 내 Local과 동기화 된다!

반응형