Git의 기록 갱신 | git rebase
git rebase 명령
로 Rebase는 지점의 기점이되는 커밋을 다른 커밋으로 이동하는 작업입니다. 일반적인 동작을 다음 그림과 같습니다 :
Git 튜토리얼 : 프로젝트 기록 선형성을 유지하기로 Rebase.
외관상은로 Rebase는 커밋에서 다른 커밋 지점을 이동하는 수단에 지나지 않습니다. 하지만 Git의 내부에서는 새로운 커밋을 생성하고 그것을 대상 기반 커밋에 적용하여이를 행하고있어 이는 곧 그대로 프로젝트 기록 갱신을하고있는 것입니다. 여기에서는 지점 자체는 같은 것이 보이지도 그것을 구성하는 노력은 전혀 다르다는 것을 이해하는 것이 중요합니다.
사용법
git rebase <base>
현재의 지점을 <base>으로 업데이트하는 명령에로 Rebase 대상으로 모든 종류의 커밋 참조 (커밋 ID, 브랜치, 태그, HEAD 에 대한 상대 참조)를 사용할 수 있습니다.
보충 설명
로 Rebase의 주요 목적은 프로젝트 기록 선형성을 유지하는 것입니다. 예를 들어, 기능에서 작업 시작 후 master 브랜치에 진행이 있었다 시나리오를 고려하십시오 :
기능을 master 브랜치에 통합하려면 직접 병합과로 Rebase 후 병합의 두 가지 방법이 있습니다. 첫번째 옵션을 선택하면 세 방향 병합 및 커밋이 필요한 반면, 후자는 앞으로 병합이 가능하며 기록 선형성은 완벽하게 유지됩니다. 다음 그림은 master 에이 버전이 앞으로 병합이 가능해진다 이유를 설명하고 있습니다.
Git 튜토리얼 : 앞으로 병합
로 Rebase는 상류 측의 변경을 로컬 저장소에 통합하는 일반적인 방법입니다. git merge 명령을 사용하여 상류 측의 변경 사항을 검색하는 경우 프로젝트의 진행 상황을 확인할 때마다 불필요한 병합 커밋이 생성됩니다. 이에 대해로 Rebase는 “내 변경 작업은 모두 변경을 완료 한 것을 기반으로하고 싶다"는 동등입니다.
공개 저장소로 Rebase는 엄금
git commit –amend 및 git reset 명령의 설명과 같이 공개 저장소에 푸시 된 커밋로 Rebase하지 안됩니다. 로 Rebase는 과거의 커밋을 새로운 커밋으로 바꿀 것이며, 프로젝트 이력의 일부가 누락 된 것 같습니다.
사용 예
다음 예제는 프로젝트의 선형성을 유지하기 위해 git rebase와 git merge를 병용 한 것입니다. 이것은 빠르고 확실하게 빨리 감기 병합하는 간편한 방법입니다.
# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"
기능 개발 중에 코드 기반 보안 취약점이 발견되었다고합니다.
# Create a hotfix branch based off of master
git checkout -b hotfix master
# Edit files
git commit -a -m "Fix security hole"
# Merge back into master
git checkout master
git merge hotfix
git branch -d hotfix
hotfix를 master에 병합하면 프로젝트 기록에는 분기가 발생합니다. 그래서 단순히 git merge 명령을 사용하는 것이 아니라,이 버전이 기록 선형성을 유지하면서 수수료 추 통합합니다 :
git checkout new-feature
git rebase master
따라서 new-feature는 master 끝으로 이동했기 때문에 master와 일반 감기 병합이 가능합니다 :
git checkout master
git merge new-feature