Git | Git의 기록 갱신 | git rebase -i


git rebase -i 명령어

git rebase 를 -i 플래그를 지정하여 실행하면 대화 형 리베이스 세션이 시작됩니다. 인터랙티브로 Rebase는 모든 커밋을 그대로 새로운베이스로 이동하는 것이 아니라 대상이되는 개별 커밋의 변경이 가능합니다. 이것을 사용하여 기존 일련의 커밋 삭제, 분할, 수정을하고 기록을 정리 할 수 있습니다. 이것은 단지 git commit –amend 명령의 향상된 버전이라고 할 수 있습니다.

사용법

git rebase -i <base>

인터랙티브 리 기반 세션을 사용하여 현재 지점을 으로 업데이트하는 명령입니다. 이 명령을 실행하면 편집기가 열리고로 Rebase하는 각 커밋에 대한 명령 (아래에서 설명합니다)의 입력이 가능합니다. 여기서 명령은 각 커밋을 새로운 기점으로 이동하는 방법을 지정합니다. 또한 편집기에서 커밋 순서를 직접 편집하여 커밋 순서를 정렬 할 수 있습니다.

보충 설명

인터랙티브로 Rebase 사용하여 기록 겉보기에 대한 완전한 만들고 변경 할 수 있습니다. 이 기능은 코드 개발 중에 지저분한 커밋을 반복 한 기록이 남아있다하더라도 사후에 그것을 검토하고 구성 할 수 있기 때문에 개발자는 상당한 자유가 손에 들어갑니다.

대부분의 개발자는 master 브랜치에 병합하기 전에 기능 지점을 깔끔하게 보이게하기 위해 인터랙티브로 Rebase 사용하는 경향이 있습니다. 인터랙티브로 Rebase 사용하면 중요하지 않은 커밋을 한 덩어리로 불필요한 커밋을 삭제하고 다른 모든 것을 정리하고 “공식적인"저장소에 커밋 할 수 있습니다. 사정을 모르는 사람에게는이 기능 개발이 전체적으로 잘 계획된 커밋 1 개의 계열로 순조롭게 진행 한 것처럼 보입니다.

사용 예

아래의 예는 대화 형이 아닌 git rebase 명령의 설명 페이지에 있던 예를 대화 형 명령의 경우 다시 작성합니다.

# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"
# Edit more files
git commit -a -m "Fix something from the previous commit"

# Add a commit directly to master
git checkout master
# Edit files
git commit -a -m "Fix security hole"

# Begin an interactive rebasing session
git checkout new-feature
git rebase -i master

마지막 명령으로 편집기가 열립니다 분기 new-feature에서 열린 2 개의 커밋을 관련 정보와 함께 표시됩니다.

pick 32618c4 Start developing a feature
pick 62eed47 Fix something from the previous commit

또한, 각각의 커밋 앞에있는 pick 명령은로 Rebase의 동작을 지정하는 임의의 명령으로 변경할 수 있습니다. 여기에서는 squash 명령을 사용하여 2 개의 커밋을 결합 할 수 있습니다 :

pick 32618c4 Start developing a feature
squash 62eed47 Fix something from the previous commit

저장하고 편집기를 닫으면로 Rebase가 시작됩니다. 이 때 다른 편집기 창이 결합 된 스냅 샷에 대한 커밋 메시지를 입력해야합니다. 커밋 메시지를 입력하면로 Rebase가 완료되고 git log 명령을 사용하여 커밋이 결합 된 것을 확인 할 수 있습니다. 이상의 조작을 시각화하면 다음과 같습니다 :

Git 튜토리얼 : git rebase -i 사용 예

여기에서 결합 된 커밋은 원래 커밋 중과도 다른 ID를 사용하는 것, 즉이 커밋은 사실 새로운 커밋임을 명심하십시오.

마지막으로, 앞으로 병합을 실행하여 정리 한 기능 가지를 master 브랜치로 통합합니다 :

git checkout master
git merge new-feature

인터랙티브로 Rebase의 위력은 재 작성된 master 브랜치의 기록에 나타납니다. ID가 62eed47 커밋은 불필요하게 기록에서 완전히 자취를 감추고 있습니다. 사정을 모르는 사람에게는 new-feature 개발자가 유능 최소한의 노력을 한번씩 실행 한 것만으로 개발을 완료 할 것처럼 보입니다. 이처럼로 Rebase는 프로젝트 기록을 정리하고 알기 쉽게하는 기능입니다.