HOWTO · Git

Git의 특정 커밋으로 리베이스

Git의 특정 커밋에 대해 git rebase를 수행할 수 있습니다.

이 페이지의 내용

이 문서에서는 Git에서 특정 커밋으로 리베이스하는 프로세스에 대해 설명합니다. 이를 달성하는 방법을 설명하기 위해 몇 가지 시나리오를 사용할 것입니다.

git rebase --onto 명령을 사용하여 분기를 특정 커밋으로 리베이스합니다. 바로 뛰어들자.

Git의 특정 커밋으로 리베이스

분기를 다른 분기로 리베이스하고 커밋을 지정해야 할 때 --onto 플래그를 사용합니다.

기본 구문:

git rebase –onto <new-parent> <old-parent> <head-of-new-parent>

예제 시나리오를 살펴보겠습니다.

사용할 기본 워크플로우는 다음과 같습니다.

이전 커밋으로 Git 리베이스 - 기본 워크플로

new-feature를 main의 특정 커밋으로 리베이스

첫 번째 시나리오에서는 전체 분기를 리베이스하지 않고 main에서 커밋을 사용하려고 한다고 가정합니다. 이를 위해서는 실행 중인 커밋의 SHA-1을 기록해야 합니다.

git log <branch-name>을 사용하여 커밋에 대한 해시를 얻을 수 있습니다.

특정 커밋으로 Git 리베이스 - 워크플로

우리의 경우 new-feature 분기의 커밋을 846e2fa 커밋(마지막 두 번째)의 main 분기로 이동하려고 합니다. 우리는 다음을 실행할 것입니다:

$ git rebase –onto 846e2fa bd9172c

위의 명령은 아래와 같은 효과를 갖습니다.

특정 커밋으로 Git 리베이스 - 출력

전체 new-feature를 이동하려고 했으므로 명령에 세 번째 인수가 필요하지 않습니다. Git은 세 번째 인수를 생략하면 기본적으로 전체 분기를 이동합니다.

new-feature를 main의 특정 커밋으로 리베이스하고 new-feature에서 첫 번째 커밋을 제거합니다.

e2ff2bc가 종속성이라고 가정하고 커밋 846e2fa에서 분기를 main으로 이동하려고 합니다. 이는 우리가 가진 것과 동일한 종속성입니다. 평범한 영어로, 우리는 846e2fa에서 new-feature를 main으로 리베이스하고 new-feature에서 첫 번째 커밋을 생략하려고 합니다.

Git을 특정 커밋으로 리베이스하고 첫 번째 커밋 제거 - 워크플로

방법은 다음과 같습니다.

$ git rebase –onto 846e2fa e2ff2bc

위의 명령은 아래와 같은 효과를 갖습니다.

Git을 특정 커밋으로 리베이스하고 첫 번째 커밋 제거 - 출력

git rebase -onto 명령은 상위 커밋을 참조로 사용합니다. 간단히 말해서 저장하려는 커밋 전에 커밋을 참조해야 합니다.

new-feature를 main의 특정 커밋으로 리베이스하고 new-feature에서 마지막 커밋을 제거합니다.

new-feature를 846e2fa로 이동하고 new-feature에서 d7dbeb 커밋을 생략하고 싶다고 가정해 보겠습니다. 어떻게 해야 할까요?

Git을 특정 커밋으로 리베이스하고 마지막 커밋 제거 - 워크플로

이것이 세 번째 인수가 들어오는 곳입니다. 다음을 실행합니다.

$ git rebase –onto 846e2fa bd9172c 730f163

결과는 다음과 같습니다.

Git을 특정 커밋으로 리베이스하고 마지막 커밋 제거 - 출력

세 번째 인수는 새 상위 커밋의 HEAD만 가리킵니다. 우리의 경우 730f163이 있습니다. 이렇게 하면 커밋과 그 이후의 모든 커밋이 삭제됩니다.

간단히 말해서 Git을 사용하면 분기를 특정 커밋으로 리베이스할 수 있습니다. git rebase -onto 명령은 리베이스할 때 세 개의 인수를 허용합니다.

세 번째 인수가 새로운 상위 커밋을 지시한다는 점을 항상 기억하십시오.