HOWTO · Git
Git의 특정 커밋으로 리베이스
Git의 특정 커밋에 대해 git rebase를 수행할 수 있습니다.
이 페이지의 내용
이 문서에서는 Git에서 특정 커밋으로 리베이스하는 프로세스에 대해 설명합니다. 이를 달성하는 방법을 설명하기 위해 몇 가지 시나리오를 사용할 것입니다.
git rebase --onto 명령을 사용하여 분기를 특정 커밋으로 리베이스합니다. 바로 뛰어들자.
Git의 특정 커밋으로 리베이스
분기를 다른 분기로 리베이스하고 커밋을 지정해야 할 때 --onto 플래그를 사용합니다.
기본 구문:
git rebase –onto <new-parent> <old-parent> <head-of-new-parent>
예제 시나리오를 살펴보겠습니다.
사용할 기본 워크플로우는 다음과 같습니다.
new-feature를 main의 특정 커밋으로 리베이스
첫 번째 시나리오에서는 전체 분기를 리베이스하지 않고 main에서 커밋을 사용하려고 한다고 가정합니다. 이를 위해서는 실행 중인 커밋의 SHA-1을 기록해야 합니다.
git log <branch-name>을 사용하여 커밋에 대한 해시를 얻을 수 있습니다.
우리의 경우 new-feature 분기의 커밋을 846e2fa 커밋(마지막 두 번째)의 main 분기로 이동하려고 합니다. 우리는 다음을 실행할 것입니다:
$ git rebase –onto 846e2fa bd9172c
위의 명령은 아래와 같은 효과를 갖습니다.
전체 new-feature를 이동하려고 했으므로 명령에 세 번째 인수가 필요하지 않습니다. Git은 세 번째 인수를 생략하면 기본적으로 전체 분기를 이동합니다.
new-feature를 main의 특정 커밋으로 리베이스하고 new-feature에서 첫 번째 커밋을 제거합니다.
e2ff2bc가 종속성이라고 가정하고 커밋 846e2fa에서 분기를 main으로 이동하려고 합니다. 이는 우리가 가진 것과 동일한 종속성입니다. 평범한 영어로, 우리는 846e2fa에서 new-feature를 main으로 리베이스하고 new-feature에서 첫 번째 커밋을 생략하려고 합니다.
방법은 다음과 같습니다.
$ git rebase –onto 846e2fa e2ff2bc
위의 명령은 아래와 같은 효과를 갖습니다.
git rebase -onto 명령은 상위 커밋을 참조로 사용합니다. 간단히 말해서 저장하려는 커밋 전에 커밋을 참조해야 합니다.
new-feature를 main의 특정 커밋으로 리베이스하고 new-feature에서 마지막 커밋을 제거합니다.
new-feature를 846e2fa로 이동하고 new-feature에서 d7dbeb 커밋을 생략하고 싶다고 가정해 보겠습니다. 어떻게 해야 할까요?
이것이 세 번째 인수가 들어오는 곳입니다. 다음을 실행합니다.
$ git rebase –onto 846e2fa bd9172c 730f163
결과는 다음과 같습니다.
세 번째 인수는 새 상위 커밋의 HEAD만 가리킵니다. 우리의 경우 730f163이 있습니다. 이렇게 하면 커밋과 그 이후의 모든 커밋이 삭제됩니다.
간단히 말해서 Git을 사용하면 분기를 특정 커밋으로 리베이스할 수 있습니다. git rebase -onto 명령은 리베이스할 때 세 개의 인수를 허용합니다.
세 번째 인수가 새로운 상위 커밋을 지시한다는 점을 항상 기억하십시오.