리포지토리를 분기 한 다음 변경 한 내용이 모두 엉망인 것 같습니다.
현재 업스트림 / 마스터를 작업의 기초로 사용하여 처음부터 다시 시작하고 싶습니다.
저장소를 리베이스하거나 전혀 삭제해야합니까?
리포지토리를 분기 한 다음 변경 한 내용이 모두 엉망인 것 같습니다.
현재 업스트림 / 마스터를 작업의 기초로 사용하여 처음부터 다시 시작하고 싶습니다.
저장소를 리베이스하거나 전혀 삭제해야합니까?
답변:
가장 간단한 해결책은 다음과 같습니다 ( upstream
원본 리포지토리를 참조하는 원격 이름으로 ' ' 사용 ).
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
(이 GitHub 페이지 와 유사하게 "나쁜 상황에 처하면 어떻게해야합니까?"섹션 )
master
지점에서 수행 한 변경 사항 (로컬로 인해 reset --hard
및 원격으로 인해 변경)이 손실 될 수 있습니다push --force
.
에 대한 커밋을 유지하려는 경우 master
현재 커밋 위에서 해당 커밋을 재생 하는 대안이 있습니다 upstream/master
.
재설정 부품을로 교체하십시오 git rebase upstream/master
. 그런 다음 여전히 강제로 밀어야합니다.
" 나쁜 상황에 처하면 어떻게해야합니까? "를 참조하십시오.
현재 작업을 백업하는보다 완전한 솔루션은 (경우에 따라) " git master 브랜치 정리 및 일부 커밋을 새로운 브랜치로 이동 "에 자세히 설명되어 있습니다.
""의 의미를 설명하려면 " 원래 GitHub 저장소에서 새 업데이트를 포크 된 GitHub 저장소로 가져 오기 "를 참조하십시오 upstream
.
참고 : 최근 GitHub 저장소는 지점 을 보호합니다master
push --force
.
따라서 master
먼저 보호를 해제하고 (아래 그림 참조) 강제 푸시 후 다시 보호해야합니다 .
참고 : GitHub에는 구체적 으로 업스트림으로 병합 된 끌어 오기 요청에 대해 분기 된 저장소를 삭제하는 바로 가기 (2019 년 2 월) 가 있습니다.
git reset --hard upstream/master
git reset
답변에서 구문을 수정했습니다 .
git remote
"명령을 참조하십시오 .
VonC의 답변을 사랑하십시오. 초보자를위한 쉬운 버전입니다.
git remote가 origin
있는데 모두 당신이 알고 있다고 확신합니다. 기본적으로 git repo에 원하는만큼 리모컨을 추가 할 수 있습니다. 그래서 우리가 할 수있는 것은 포크가 아닌 원래의 저장소 인 새로운 리모컨을 소개하는 것입니다. 나는 그것을 부르고 싶다original
포크에 오리지널 레포를 리모컨으로 추가합시다.
git remote add original https://git-repo/original/original.git
이제 우리가 최신 코드를 가지고 있는지 확인하기 위해 원래 저장소를 가져와 봅시다.
git fetch original
VonC가 제안했듯이, 우리가 마스터에 있는지 확인하십시오.
git checkout master
이제 오리지널 리포지토리의 최신 코드로 포크 속도를 높이려면 오리지널 리모컨에 따라 마스터 브랜치를 하드 리셋하기 만하면됩니다.
git reset --hard original/master
그리고 당신은 끝났습니다 :)
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.
마지막 단계에. 어떤 충고?
original
local의 "업스트림"과 upstream
같이 Github 문서에서 사용하는 것보다 낫습니다 . 모호함을 줄입니다. 이것이 왜 당신이 그것을 사용하는지 궁금합니다. origin/master
master
@VonC의 훌륭한 답변을 따르면. GitHub 회사 정책에 따라 마스터에서 '강제 푸시'가 허용되지 않을 수 있습니다.
remote: error: GH003: Sorry, force-pushing to master is not allowed.
이와 같은 오류 메시지가 표시되면 다음 단계를 시도하십시오.
포크를 효과적으로 재설정하려면 다음 단계를 수행해야합니다.
git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin
GitHub에서 포크를 열고 "설정-> 지점-> 기본 지점"에서 새 기본 지점으로 'new_master'를 선택하십시오. 이제 '마스터'브랜치를 강제로 밀어 넣을 수 있습니다.
git checkout master
git push --force origin
그런 다음 GitHub 설정에서 'master'를 기본 분기로 다시 설정해야합니다. 'tmp_master'를 삭제하려면 다음을 수행하십시오.
git push origin --delete tmp_master
git branch -D tmp_master
변경 사항을 잃어 버렸다는 경고에 대한 다른 답변은 여전히 적용됩니다.
(모두 git 명령 행 인터페이스를 통해 작업하는 것을 좋아하지는 않습니다)
이것이 설정되면 7-13 단계 만 수행하면됩니다.
가져 오기> 체크 아웃 마스터 분기> 마스터로 재설정> 변경 사항을 서버에 푸시
"마스터"브랜치를 두 번 클릭하여 아직 체크 아웃되지 않은 경우 체크 아웃하십시오.
재설정하려는 커밋을 찾으십시오. repo "master"를 호출 한 경우 "master / master"태그가있는 커밋을 찾을 수 있습니다.
커밋> "현재 커밋을이 커밋으로 재설정"을 마우스 오른쪽 단추로 클릭하십시오.
대화 상자에서 "사용 모드 :"필드를 "하드-모든 작업 사본 변경 폐기"로 설정 한 다음 "확인"을 누르십시오 (먼저 잃어 버리지 않으려면 변경 사항을 별도의 브랜치에 두십시오).
당신의 완료!