Git에서 마음에 들지 않으면 리베이스를 어떻게 롤백합니까?
Git에는 rebase를위한 드라 이런이 없습니다. 리베이스를 수행하고 아직 푸시하지 않은 경우, 발생하지 않은 것처럼 이전으로 롤백하려면 어떻게해야합니까?
Git에서 마음에 들지 않으면 리베이스를 어떻게 롤백합니까?
Git에는 rebase를위한 드라 이런이 없습니다. 리베이스를 수행하고 아직 푸시하지 않은 경우, 발생하지 않은 것처럼 이전으로 롤백하려면 어떻게해야합니까?
답변:
reflog 를 사용하여 rebase가 시작되기 전에 첫 번째 작업을 찾은 다음 --hard를 다시 재설정 할 수 있습니다. 예 :
$ git reflog
b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...
$ git reset HEAD@{2} --hard
이제 rebase가 시작되기 전으로 돌아 가야합니다.
재설정 할 올바른 위치를 찾으려면 "rebase"로 시작 하지 않는 맨 위에 가장 가까운 항목을 선택하기 만하면 됩니다.
rebase가 브랜치에서 수행 한 유일한 작업 인 경우 , 즉 푸시되지 않은 커밋 / 변경 사항이없는 경우-로컬 브랜치를 삭제 git branch -D한 다음 다시 확인할 수 있습니다.
$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
또는 동일한 효과를 위해 --hard를 원본 분기로 재설정 할 수 있습니다.
$ git reset --hard origin/my-branch
푸시되지 않은 다른 커밋이있는 동안이 작업을 수행하면 해당 커밋을 잃게됩니다. 이 경우 위의 reflog 접근 방식을 사용하여 커밋을 만든 reflog 항목으로 다시 이동하십시오.
ORIG_HEAD리베이스하는 브랜치의 원래 해시 값으로 세트 를 리베이스합니다. 따라서에 대한 숫자 2를 찾는 대신 ...를 HEAD@{2}사용할 수 ORIG_HEAD있지만 여전히 방해받지 않는 경우 에만 사용할 수 있습니다 ORIG_HEAD. 많은 Git 명령이이를 설정합니다 (다양한 상황에서 rebase, am, reset 및 merge).
Rebase는 이전 상태의 백업을 ORIG_HEAD.
따라서 다음을 실행하여 마지막 리베이스를 되돌릴 수 있습니다.
git reset --hard ORIG_HEAD