본문 바로가기

Hello World !/GIT

commit을 하나로 합친다? git rebase !!

일을 하다보면 하나의 프로젝트에서 branch를 왔다갔다 해야하는 일이 많다.

그러다보면 하나의 issue에 여러 commit이 있으면 보기 안좋고 관리도 어려워진다.


git에 익숙하지 않아 commit을 합치는 방법이 있을까 하고 구글링을 하다가 git rebase라는 명령어를 접하게 되었다.

git rebase는 많은 기능을 가지고 있지만 이번 포스팅에서는 commit을 합치는 방법만 작성한다.


* 스크린샷의 가려진 부분은 경로 및 날짜 등 저에게 민감한 부분이라 가린 점 양해 부탁드립니다.


준비단계! 먼저 여러개의 commit을 찍는다.



git log를 통해 commit 내용을 확인 할 수 있다.



첫번째! git rebase --interactive

git rebase --interactive 혹은 git rebase -i 명령어를 통해 commit을 수정 할 수 있는 화면으로 접근이 가능하다.

단, 단일로는 사용이 불가능하고 --interactive 혹은 -i 뒤에 옵션이 있어야 한다.

위에 스크린샷을 보면 initial commit을 제외하고 3개를 commit 했다. (initaial commit은 이미 push 된 상태)

3개의 commit을 보기 위해서 git rebase -i HEAD~3을 입력한다.

HEAD~3의 의미는 가장 최근 commit부터 3개를 보여주세요~ 라는 의미다. (HEAD^^^처럼 ^개수로도 동일하게 확인이 가능하다.)


두번째! 이제 commit들을 합쳐 볼까?

git rebase -i HEAD~3을 통해 접근하면 아래와 같은 화면으로 접근하게 된다.

아래는 vi 에디터로 commit의 정보를 보여준다.


상단에 보이는 pick 2f61 ~ rebase test1 이 commit 내용이다.

총 3개의 commit을 볼 수 있으며, 명령/hash/commit message 순으로 보여진다.

명령에는 여러개가 있으며 하단에 commands : 아래에 있는 명령을 수행할 수 있다.

기본적으로 pick으로 설정되어 있는데 이대로 저장하면 해당 commit을 수행한다는 의미이다.(push 할 때 해당 commit을 목록에 포함.)

우리가 이번 포스팅에서 사용 할 명령은 squash이다.

squash는 상위 commit에 합치는 명령이며, squash한 commit의 message를 같이 가져 갈 수 있다.

squash의 fullname 대신 약어로 s만 입력해도 명령을 수행할 수 있다.

우리는 rebase test1에 rebase test2와 rebase test3을 합치려고 한다.

아래는 합치기 위해 명령을 수정한 스크린샷이다.



vi를 처음 접하시는 분들을 위해 간단하게 설명하자면, 이건 일반 터미널이나 명령프롬프트가 아니다.

일종의 에디터이기에 사용 방법이 조금 다르다.

나는 vi 에디터를 그냥 마우스 없이 작업이 가능한 에디터로 생각하고 있다.

마우스가 없으니 키보드로 커서를 이동하고 조작한다.

제대로 사용해본 적이 없고 명령어도 잘 모르기때문에 여기서 사용하기 위해 꼭 필요한 명령어만 설명한다.

i - 내용을 수정할 수 있는 수정 모드로 진입.(enter 입력 없이 곧바로 수정모드로 전환)

esc - 수정모드를 종료

키보드 이동키 - 커서를 이동

:wq - 저장 후, vi 에디터 종료

:q - 저장하지 않고, vi 에디터 종료

:q! - 저장하지 않고, vi 에디터 강제 종료


commit의 명령을 수정을 하고 :wq를 통해 저장 후, vi 에디터를 종료하면 다른 화면의 vi 에디터가 나타난다.

이 화면은 간단하게 commit message를 수정할 수 있는 화면이며 :wq를 입력하여 수정 없이 종료하거나, i를 입력하여 commit message를 수정할 수 있다.


이제 commit이 합쳐졌다. 로그를 통해 확인해보자


글이 길어 어렵게 느껴지지만 한두번만 해보면 금방 익숙해지고 합칠 수 있다.


다음 글에서는 주의사항에 대해 알아보도록 하겠습니다~!