Git의 기록 갱신 | git rebase -i
git rebase -i 명령어
git rebase 를 -i 플래그를 지정하여 실행하면 대화 형 리베이스 세션이 시작됩니다. 인터랙티브로 Rebase는 모든 커밋을 그대로 새로운베이스로 이동하는 것이 아니라 대상이되는 개별 커밋의 변경이 가능합니다. 이것을 사용하여 기존 일련의 커밋 삭제, 분할, 수정을하고 기록을 정리 할 수 있습니다. 이것은 단지 git commit –amend 명령의 향상된 버전이라고 할 수 있습니다.
사용법
git rebase -i <base>
인터랙티브 리 기반 세션을 사용하여 현재 지점을
보충 설명
인터랙티브로 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는 프로젝트 기록을 정리하고 알기 쉽게하는 기능입니다.