programing

포크를 정리하고 업스트림에서 다시 시작합니다.

magicmemo 2023. 5. 1. 20:49
반응형

포크를 정리하고 업스트림에서 다시 시작합니다.

저장소를 포크한 다음 몇 가지 변경을 가했는데 모든 것을 망친 것 같습니다.

현재 업스트림/마스터를 기반으로 처음부터 다시 시작하고 싶습니다.
리포지토리의 기본을 변경해야 합니까 아니면 삭제해야 합니까?

장가간해같다다습니과음은결책한단▁'가다같'를 사용하는 입니다.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 페이지와 유사하게, "상황이 좋지 않을 경우 어떻게 해야 합니까?")

분기에서 수행된 변경사항(로컬에서 모두)이 손실될 수 있음을 유의하십시오.reset --hard그리고 먼 쪽에서는, 그것 때문에.push --force).

커밋을 유지하려면 다른 방법을 사용할 수 있습니다.master그 커밋들을 현재 상황에서 재생합니다.upstream/master.
재설정 부품을 다음으로 교체합니다.git rebase upstream/master그러면 강제로 눌러야 합니다.
또한 "상황이 좋지 않은 경우 어떻게 해야 합니까?"를 참조하십시오.


보다 완벽한 솔루션인 현재 작업 백업(경우에 따라)은 "Cleanupgit master 브랜치 일부 커밋을 새 브랜치로 이동"에 자세히 나와 있습니다.

또한 "원래 GitHub 저장소에서 분기된 GitHub 저장소로 새 업데이트 가져오기"를 참조하십시오.upstream사실은.

상류의


참고: 최근 GitHub 저장소는 지점을 보호합니다.push --force.
은 그래서신당은해제합니다야해호를보.master먼저(아래 그림 참조), 강제 종료 후 다시 보호합니다.

여기에 이미지 설명 입력


참고: 특히 GitHub에는 업스트림에 병합된 풀 요청에 대한 분기된 저장소를 삭제할 수 있는 바로 가기가 현재(2019년 2월) 있습니다.

VonC의 답변을 사랑합니다.여기 초보자들을 위한 쉬운 버전이 있습니다.

라고 불리는 깃 리모콘이 있습니다.origin다들 알고 계실 겁니다기본적으로 Git repo에 원하는 만큼의 원격을 추가할 수 있습니다.그래서, 우리가 할 수 있는 것은 새로운 리모컨을 도입하는 것입니다. 그것은 포크가 아닌 원래의 레포입니다.나는 그것을 부르는 것을 좋아합니다.original

원격으로 포크에 원본 레포를 추가해 보겠습니다.

git remote add original https://git-repo/original/original.git

이제 원본 레포를 가져와서 최신 코드가 있는지 확인해 보겠습니다.

git fetch original

VonC가 제안했듯이, 우리가 마스터 위에 있는지 확인하십시오.

git checkout master

이제 원본 repo의 최신 코드로 포크의 속도를 높이기 위해 원본 리모컨에 따라 마스터 브랜치를 하드 리셋하기만 하면 됩니다.

git reset --hard original/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'를 선택합니다.이제 'master' 분기를 강제로 누를 수 있습니다.

git checkout master
git push --force origin

그런 다음 GitHub 설정에서 'master'를 기본 분기로 설정해야 합니다.'tmp_master' 삭제하기

git push origin --delete tmp_master
git branch -D tmp_master

거스름돈 분실에 대한 다른 경고는 여전히 적용됩니다. 주의하십시오.

소스 트리 GUI를 통해 100% 수행하는 방법

(모든 사람이 git 명령줄 인터페이스를 통해 작업하는 것을 좋아하는 것은 아닙니다.)

설정이 완료된 후에는 7-13단계만 수행하면 됩니다.

Fetch > checkout master branch > master로 리셋 > push changes to server

스텝

  1. 화면 상단의 메뉴 도구 모음에서: "리포지토리" > "리포지토리 설정"

상단 메뉴 모음에서 "리포지토리"가 강조 표시됨

  1. "추가"

대화상자 하단의 "추가" 단추

  1. GitHub으로 돌아가서 복제 URL을 복사합니다.

Github 웹 사이트의 "Clone or Download" 버튼과 Giturl

  1. URL을 "URL / 경로" 필드에 붙여넣은 다음 해당 이름을 지정합니다.저는 그것을 "마스터"라고 불렀습니다.기본 원격 확인란을 선택하지 않습니다.이 리포지토리에 직접 푸시할 수 없습니다.

"원격 세부사항" 대화상자에서 강조 표시된 "원격 이름" 및 "URL/경로" 필드

  1. 확인을 누르면 리포지토리 목록에 나타납니다.

"리포지토리 설정" 대화상자의 리포지토리 목록에 "마스터" 리포지토리가 추가됨

  1. 다시 "확인"을 누르면 "원격" 목록에 표시됩니다.

사이드바의 원격 목록에서 "마스터" 리포지토리가 강조 표시됨

  1. "Fetch" 버튼(소스 트리 헤더 영역 왼쪽 상단)을 클릭합니다.

헤더 영역의 "Fetch" 버튼

  1. "Fetch from all remote" 확인란이 선택되어 있는지 확인하고 "ok"를 누릅니다.

"Fetch" 대화 상자에서 "Fetch from all remote" 확인란이 강조 표시됨

  1. 아직 체크아웃하지 않은 경우 "마스터" 분기를 두 번 클릭하여 체크아웃합니다.

  2. 재설정할 커밋을 찾습니다. repo를 "master"라고 부른 경우 "master/master" 태그가 있는 커밋을 찾을 가능성이 높습니다.

"master/master" 태그가 있는 커밋의 예

  1. 커밋 > "현재 분기를 이 커밋으로 재설정"을 마우스 오른쪽 버튼으로 클릭합니다.

  2. 대화상자에서 "사용 모드:" 필드를 "하드 - 모든 작업 복사본 변경사항 삭제"로 설정한 후 "확인"을 누릅니다. 손실하지 않을 변경사항은 먼저 별도의 분기에 저장하십시오.

"Reset to commit" 대화상자에서 "Using mode" 필드가 강조 표시됩니다.

  1. 변경사항을 보고서 사본에 업로드하려면 "Push" 버튼(소스 트리 헤더 영역 왼쪽 상단)을 클릭합니다.

머리글 영역의 "누르기" 버튼

완료!

VonC의 대답은 다음과 같습니다.

마스터 분기에서 수행된 변경사항은 로컬에서 재설정 --하드로 인해 손실될 수 있으며, 원격에서는 푸시 --포스로 인해 손실될 수 있습니다.

따라서 기존 포크에서 새로운 분기를 생성하여 이 분기를 추적하는 방법에 대해서만 설명하겠습니다.main원래 분기된 레포의 분기.

이것이 중요한 이유:동일한 포크와 다른 기능에 대해 다른 풀 요청이 이미 제출되어 있다고 가정합니다.아니면 다른 누군가가 당신의 포크에서 포크를 가져갔을 수도 있습니다.그러면 하드 리셋이 좋지 않습니다.

원격에서 분기된 를 호출한다고 가정합니다.upstream.

git fetch upstream main
git switch -c upstreamb/main/track upstream/main

당신은 새로운 지점에 있게 될 것입니다.upstreamb/main/track

% git branch 
...
* upstreamb/main/track
% git pull upstream main
From github.com:XXXX/YYYY
 * branch                  main       -> FETCH_HEAD
Already up to date.

주의:/분기 이름에서 사용할 수 있습니다.혼란과 모호함을 피하기 위해 추가했습니다.b로컬 분기임을 나타내기 위해 업스트림으로 이동합니다.

이제 트랙에서 새 피쳐 분기를 작성하고 다음을 사용할 수 있습니다.git difftool또는 필요한 경우 폐기된 작업에서 선택적으로 비교하고 복사할 수 있는 모든 것.

언급URL : https://stackoverflow.com/questions/9646167/clean-up-a-fork-and-restart-it-from-the-upstream

반응형