Git에서 Rebase 실행 취소
이 튜토리얼은 Git의 브랜치에서 수행된 rebase
를 실행 취소하는 방법에 대해 설명합니다.
Rebasing은 지점의 기반을 새로운 기반으로 이동하는 작업입니다. 메인 브랜치를 기반으로 하는 기능 브랜치가 있다고 가정합니다. 그런 다음 기본 분기에 몇 가지 새로운 커밋이 있습니다. 새로운 기능을 기반으로 기능 분기를 리베이스할 수 있습니다.
우리는 이 rebase
작업을 다시 생각할 수 있습니다. 우리는 더 이상 메인 브랜치의 새로운 커밋을 기반으로 새로운 기능 브랜치를 만들고 싶지 않습니다.
기능 분기가 기본 분기에서 처음 분기할 때 커밋을 기반으로 하기를 원합니다. 따라서 이를 달성하려면 이제 브랜치에서 수행된 rebase
작업을 실행 취소해야 합니다.
이제 이를 예를 들어 설명하겠습니다.
git reflog
및 git reset
을 사용하여 Git의 분기에서 수행된 rebase
실행 취소
main
분기가 있고 그 위에 새 feature1
분기를 생성했다고 가정해 보겠습니다.
그리고 main
브랜치에서 일부 커밋이 발생했다고 가정해 보겠습니다. 새 커밋을 기반으로 새 분기 feature1
의 rebase
를 수행했습니다. 이것은 우리가 취소하려는 작업입니다.
rebase
를 실행 취소하려면 Git의 reflog
명령을 사용할 수 있습니다. git reflog
를 사용하여 rebase
가 시작되기 직전에 분기의 헤드 커밋을 확인할 수 있습니다.
이제 feature1
브랜치에서 git reflog
명령을 실행할 것입니다(rebase
가 수행된 지점).
$ git reflog
b745978 HEAD@{0}: rebase: that commit
4sd7c1c HEAD@{1}: rebase: this commit
adf3d3d HEAD@{2}: checkout: moving from main to feature1
...
HEAD@{2}
가 rebase
작업 직전의 커밋임을 알 수 있습니다.
git reset
을 사용하여 다음과 같이 분기를 이 커밋으로 재설정할 수 있습니다.
$ git reset HEAD@{2} --hard
위의 명령을 실행한 후 feaure1
분기는 이제 rebase
직전의 상태가 됩니다.
또는 다음과 같이 git reset
을 사용하여 rebase
를 실행 취소할 수도 있습니다.
$ git reset --hard ORIG_HEAD
ORIG_HEAD
는 작업 전에 HEAD
의 위치를 기록하기 위해 HEAD
를 과감하게 이동하는 명령에 의해 생성되므로 분기 팁을 실행하기 전 상태로 쉽게 다시 변경할 수 있습니다.
이 대체 접근 방식에 대한 주의 사항은 ORIG_HEAD
viz를 변경할 수 있는 원하지 않는 rebase
후에 수행해서는 안 되는 다른 작업이 없다는 것입니다. reset
, rebase
또는 merge
.
따라서 이러한 방법을 통해 Git의 분기에서 원하지 않는 rebase
를 취소할 수 있습니다.