힘내 리베이스를 롤백하는 방법


103

Git에서 마음에 들지 않으면 리베이스를 어떻게 롤백합니까?

Git에는 rebase를위한 드라 이런이 없습니다. 리베이스를 수행하고 아직 푸시하지 않은 경우, 발생하지 않은 것처럼 이전으로 롤백하려면 어떻게해야합니까?


4
자식 REBASE --abort
olibiaz

2
"실패"란 무엇을 의미합니까? 리베이스 를 완료 했는데 결과가 마음에 들지 않습니까? 아니면 충돌을 일으키고 중간에 리베이스를 중지하고 싶습니까? 충돌하고 미완성 리베이스를 추진할 수 없기 때문에 전자를 추측 하지만 두 가지 다른 질문이기 때문에 묻습니다.
에드워드 톰슨

예, 전직입니다. 감사.
user1615666

답변:


212

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 항목으로 다시 이동하십시오.


11
또 다른 편리한 지름길 : ORIG_HEAD리베이스하는 브랜치의 원래 해시 값으로 세트 를 리베이스합니다. 따라서에 대한 숫자 2를 찾는 대신 ...를 HEAD@{2}사용할 수 ORIG_HEAD있지만 여전히 방해받지 않는 경우 에만 사용할 수 있습니다 ORIG_HEAD. 많은 Git 명령이이를 설정합니다 (다양한 상황에서 rebase, am, reset 및 merge).
torek

1
감사합니다! 이것에 큰 도움이 :)
Alec

1
내 소스 코드를 돌려 주셔서 감사합니다 ....이 $ git reset HEAD @ {2} --hard
reza rahmad

로컬 브랜치를 삭제하고 다시 가져 오라는 제안에 대한 내 찬성 투표를받습니다!
quicklikerabbit

1
이것은 생명의 은인입니다. @Robbie 감사합니다
Nelson Katale

42

Rebase는 이전 상태의 백업을 ORIG_HEAD.
따라서 다음을 실행하여 마지막 리베이스를 되돌릴 수 있습니다.

git reset --hard ORIG_HEAD

1
그 태그가 어디에 문서화되어 있는지 아십니까?
Ben S

이것에 약간의 단점이 있습니까 아니면 새로운 기능입니까? 이것은 리플 로그를 살펴 보는 것보다 훨씬 쉬운 것 같습니다.
1252748

새로운 것이 아닙니다. 그러나 일반적으로 리베이스 직후에 사용하고 여러 리베이스 후에 소급 적으로 돌아갈 수 없습니다. 이러한 복잡한 상황에서는 리 로그 항목을 찾아야하지만 "죄송합니다. 지금? " 잘 작동합니다.
Meligy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.