IT박스

빨리 감기 병합 실행 취소

itboxs 2020. 11. 28. 08:52
반응형

빨리 감기 병합 실행 취소


실행 취소하려는 git repo를 변경했습니다.

내 자식 저장소는 다음과 같습니다.

A-B----     master
   \   /
    C-D     * develop

나는 develop브랜치 에 있었고 브랜치와 다르다는 것을 잊고 master에서 변경 한 다음에 develop병합 master한 다음 내 리모컨 ( publish)으로 푸시했습니다 .

B (공통 조상) 이후 마스터에 변경 사항이 없었기 때문에 git은 빨리 감기 병합을 수행했습니다.

이제 내 저장소는 다음과 같습니다.

A-B-C-D   master, develop, remotes/publish/master, remotes/publish/develop.

마지막 병합을 되돌리고 masterB로 복원하고 싶었 습니다.

Git에서 마지막 커밋을 실행 취소하는 방법에서 읽은 내용에서 ? , 나는 분기를 개정 B git reset sha-of-B로 복원 하는 데 사용 되었습니다 master.

질문 :

  • develop개정 D로 복원 하려면 어떻게합니까 ?
  • 그런 다음 이러한 변경 사항을 원격 / 게시로 다시 푸시하려면 어떻게해야합니까?

브랜치 마스터를 재설정하면 브랜치 개발을 건드리지 않습니다. 모든 것을 순서대로 평판하려면 다음을 수행해야합니다.

git checkout master
git reset --hard sha-of-B
git checkout develop
git reset --hard sha-of-D
git checkout master
git merge develop --no-ff

  • 당신이 합쳐지고 밀린 곳에서 여전히 마스터 에 있다고 상상해보십시오.
  • git reset --hard @{1}
    • 이렇게하면 "마스터" 분기 가 컴퓨터에서 한 단계 뒤로 돌아간 위치 (예 : "B")로 재설정 됩니다.
  • 에 대한 개발 은 여전히 "D"에 있어야하기 때문에, 아무것도하지 않고
  • git push publish develop --force-with-lease=master
    • 이것은 일반적인 방법으로 브랜치를 “개발”밀어 붙입니다.
    • 또한 안전한 방법으로 얻은 권한으로 분기 "마스터"를 뒤로 밀어냅니다.--force-with-lease
    • 사용하면 다른 사람의 작업을 자동으로 덮어 쓸 --force있으므로 사용하지 않습니다.

당신이 develop실행했을 때 체크 아웃 된 것 같으면 이것이 당신을 git reset엉망으로 만든 것입니다.

develop다음과 같이 수정할 수 있습니다 .

git checkout develop
git merge --ff-only D

이제 masterB로 다시 복원 할 수 있습니다 .

git checkout master
git reset --hard B

돌아가서 develop푸시하십시오.

git checkout develop
git push develop

참고 URL : https://stackoverflow.com/questions/14308580/undo-a-fast-forward-merge

반응형