말씀드린 것처럼 미완성 코드를 브랜치에서 마스터로 머지하고 git이 github에 푸시한 뒤 dev에서 계속해서 코드를 개선하다가 머지를 철회하고 싶을 때, 로컬 병합이 불가능합니다. github에 푸시했는데 왜 충돌이 발생했는지 모르겠습니다.
로컬에서 병합하는 경우 git reflog을 통해 과거 작업을 볼 수 있으며 git reset --hard HEAD@{n}를 통해 리플로그의 n단계로 돌아갈 수 있습니다.
git reflog
git reset --hard HEAD@{n}
n
원격 마스터를 이전 상태로 되돌릴 수 있습니다 git push origin master -f
git push origin master -f
이때 로컬 마스터도 최신 상태여야 합니다. 먼저 git checkout master 기록을 살펴본 다음 git log 커밋 해시를 기반으로 롤백합니다. git reset --hard xxxxxx
git checkout master
git log
git reset --hard xxxxxx
원격 마스터를 업데이트할 수 있습니다git push origin master -f
git push origin master만들 수는 없습니다. 커밋하고 코드를 수동으로 수정하고 병합 전 상태로 롤백하므로 할 필요 없이 직접 -f업데이트git push origin master할 수 있습니다.
git push origin master
-f
로컬에서 병합하는 경우
그런 다음git reflog
을 통해 과거 작업을 볼 수 있으며git reset --hard HEAD@{n}
를 통해 리플로그의n
단계로 돌아갈 수 있습니다.원격 마스터를 이전 상태로 되돌릴 수 있습니다
git push origin master -f
사실 병합을 하면 병합 커밋이 생성됩니다. 로컬에서 먼저 할 수도 있습니다
이때 로컬 마스터도 최신 상태여야 합니다. 먼저
그런 다음 마찬가지로git checkout master
기록을 살펴본 다음git log
커밋 해시를 기반으로 롤백합니다.git reset --hard xxxxxx
원격 마스터를 업데이트할 수 있습니다
git push origin master -f
두 가지 방법은 동일합니다. 커밋을 삭제했는데, 커밋이 원격으로 존재하기 때문에 이때 200년 간의 기록 정보가 일치하지 않으므로 이 커밋 후에 새로 추가하지 않는 한 직접
git push origin master
만들 수는 없습니다. 커밋하고 코드를 수동으로 수정하고 병합 전 상태로 롤백하므로할 필요 없이 직접
-f
업데이트git push origin master
할 수 있습니다.