Git Rebase를 실행 취소합니다


질문

 

누구든지 Git Rebase를 쉽게 취소하는 방법을 알고 있습니까?

마음에 오는 유일한 방법은 수동으로가는 것입니다.

  • git checkout the commit parent to both of the branches
  • then create a temp branch from there
  • cherry-pick all commits by hand
  • replace the branch in which I rebased by the manually-created branch

현재 상황에서 이것은 두 가지 분기에서 쉽게 쉽게 지적 할 수 있기 때문에 일할 것입니다 (나의 것들은 나의 것들 였고, 다른 하나는 나의 동료의 것들였습니다).

그러나 나의 접근 방식은 나를 지하력과 오류가 발생하기 쉽고 나에게 그것을 찌르려고합니다 (나는 단지 내 자신의 나라의 2 개를 리포스하겠다고 말하자요.)

어떤 아이디어가 있습니까?

설명 : 저는 rebase의 무리가 재생되었는지에 대해 이야기하고 있습니다.하나뿐만 아니라.


답변

 

가장 쉬운 방법은 리베이스가 refraze에서 시작하기 직전의 지점의 머리를 찾는 것입니다 ...

git reflog

현재 분기를 재설정하려면 (일반적인 경고가 --hard 옵션으로 재설정하기 전에 절대적으로 확신되는 것에 대해서는 일반적인 경고가 있음).

ref log에서 @ {2}의 @ {2}이었습니다.

git reset --hard HEAD@{2}

Windows에서는 참조를 인용해야 할 수 있습니다.

git reset --hard "HEAD@{2}"

Git Log Head @ {2} (Windows : git log "head @ {2}")를 수행하여 후보 오래된 머리의 기록을 확인할 수 있습니다.

분기 리포트 당 비활성화되지 않은 경우 리베이스가 최종 머리에 다시 연결하기 전에 분기 헤드를 분리하므로 {1}을 간단히 할 수 있어야합니다.나는 이것을 최근에 확인하지 않았지만 이것을 두 번 확인합니다.

기본값이 지정되면 모든 refrogs는 non-bene 리포지토리에 활성화됩니다.

[core]
    logAllRefUpdates = true


답변

실제로 Rebase는 출발점을 orig_head에 저장하므로 일반적으로 다음과 같이 간단합니다.

git reset --hard ORIG_HEAD

그러나 재설정, 리베이 제 및 병합은 원래의 헤드 포인터를 orig_head로 저장하여 실행 취소하려고하는 리베이스 이후에 이러한 명령을 수행 한 경우 Relfog를 사용해야합니다.



답변

Charles의 답변이 작동하지만이 작업을 수행 할 수 있습니다.

git rebase --abort

재설정 후 정리하려면.

그렇지 않으면 "Interactive Rebase가 이미 시작되었습니다"라는 메시지가 나타날 수 있습니다.



답변

지점을 이전 팁의 Dangling Commit Object로 재설정하는 것은 물론 최상의 솔루션이므로 이전 상태를 복원하지 않고도 노력없이 이전 상태를 복원합니다.그러나 당신이 그 커밋을 잃어 버렸을 때 (f.ex. 그 동안 저장소를 쓰레기 수집했거나 신선한 복제본이기 때문에), 항상 분기를 다시 리베이스 할 수 있습니다.이것의 열쇠는 - 독토 스위치입니다.

마스터 팁이 0deadbeef 커밋이었을 때 마스터를 분기 한 주제라고 상상할 수있는 주제 지점이 있음을 알려줍니다.주제 지점에있는 동안 어느 시점에서, 당신은 Git Rebase Master를했습니다.이제 이것을 실행 취소하고 싶습니다.방법은 다음과 같습니다.

git rebase --onto 0deadbeef master topic

이렇게하면 마스터가 아닌 주제에 대한 모든 커밋이 있으며 0DeadBeef의 맨 위에 재생됩니다.

-onto와 함께, 당신은 당신의 역사를 꽤 많은 모양으로 재 배열 할 수 있습니다.

재미있게 보내십시오.:-)



답변

원격 저장소 (일반적으로 원산지)로 지점을 밀어 넣은 다음 (병합없이) 성공증 (rebase -abort)을 제공합니다. 명령:

git 재설정 - 오리지널 / {branchname}

예시:

$ ~/work/projects/{ProjectName} $ git status
On branch {branchName}
Your branch is ahead of 'origin/{branchName}' by 135 commits.
  (use "git push" to publish your local commits)

nothing to commit, working directory clean

$ ~/work/projects/{ProjectName} $ git reset --hard origin/{branchName}
HEAD is now at 6df5719 "Commit message".

$ ~/work/projects/{ProjectName} $ git status
On branch {branchName}
Your branch is up-to-date with 'origin/{branchName}.

nothing to commit, working directory clean


답변

실제로 아직없는 작업을 수행하기 전에 실제로 백업 태그를 분기에 넣으십시오 (대부분의 리볼즈는 사소한 일이지만, 어디서나 복잡 해 보이면).

그런 다음 복원은 Git 재설정 - 하드 백업만큼 쉽습니다.

출처:https://stackoverflow.com/questions/134882/undoing-a-git-rebase