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 항목으로 다시 이동하십시오.
답변
Rebase는 이전 상태의 백업을 ORIG_HEAD
.
따라서 다음을 실행하여 마지막 리베이스를 되돌릴 수 있습니다.
git reset --hard ORIG_HEAD