포크 Github 저장소에서 비 마스터 브랜치의 변경 사항을 어떻게 병합합니까?

StackOverflow https://stackoverflow.com/questions/2014914

  •  19-09-2019
  •  | 
  •  

문제

다음 STACKOVERFLOW 질문 모두에서 허용 된 답변은 저장소를 포크하는 상황에서 포크 리포지토리에서 변경 사항을 병합하는 방법을 설명하고 원래의 저장소가 수정 된 다음 마스터 브랜치로 변경된 변경 사항을 다시 입력하려고합니다. 당신의 포크 레포.

그러나, 나는 당신이 당신이 포기한 원래 리포지토리의 비 마스터 브랜치에 대한 최신 정보를 어떻게 유지하는지 명확하지 않습니다. 예를 들어, 내가 원래 갈 때 Bitprophet의 직물 저장소, 그것은 다음 가지가 포함되어 있습니다.

  • 주인
  • 0.9
  • 0.9-doc-lewrite (더 이상 존재하지 않음)
  • Path-and-#24 (더 이상 존재하지 않음)

마지막 두 가지 지점은 더 이상 존재하지 않으며 이제는 새로운 지점이 있습니다. flexible-task-declarations. 마스터, 원산지/마스터 및 업스트림/마스터가 모두 동일한 SHA1 해시를 가지고 동일한 git 스냅 샷을 가리 키도록 마스터 브랜치를 가져 와서 병합하고 밀어 넣었습니다. 그러나 더 이상 존재하지 않는 분기를 제거하고 새 지점을 업데이트하여 포크가 최신 상태가되도록하는 방법을 잘 모르겠습니다. 각 업스트림 브랜치를 추적 한 다음 각 지점을 개별적으로 가져오고 병합하고 밀어야합니까, 아니면 더 나은 방법이 있습니까?

도움이 되었습니까?

해결책

시나리오 1 : 더 이상 존재하지 않는 가지 삭제

더 이상 존재하지 않는 분기를 삭제하기 위해 StackoverFlow 질문에 대한 답의 지침을 따랐습니다. 로컬 및 Github에서 GIT 브랜치를 어떻게 삭제합니까? 다음 명령을 발행하여 :

$ git push origin :0.9-doc-rewrite
$ git push origin :path-and-#24

시나리오 2 : 기존 비 마스터 브랜치의 변경 사항 병합

업스트림/0.9 지점을 최신으로 얻으려면 다음을 수행했습니다.

$ git checkout --track origin/0.9
$ git fetch upstream
$ git merge upstream/0.9
$ git push

시나리오 3 : 새로운 비 마스터 브랜치 추적

이것이 가장 좋은 방법인지 확실하지 않지만 여기에 내가 한 일이 있습니다.

$ git branch flexible-task-declarations upstream/flexible-task-declarations
Branch flexible-task-declarations set up to track remote branch flexible-task-declarations from upstream.
$ git checkout flexible-task-declarations
$ git push origin flexible-task-declarations

모든 지점이 동일한 커밋인지 확인하기 위해 :

$ git branch -av

이것은 로컬과 원격의 모든 지점을 보여 주며 가장 최근의 커밋 메시지와 SHA1 해시를 보여줍니다.

시나리오 처리를위한 더 나은 방법을 밝힐 수있는 웹 연구 3

간단한 git 클론 또는 SVN 체크 아웃과 비교할 때 Git Fork의 주요 차이점은 포크가 마스터 레포와 최신 상태를 유지하지 않는다는 것입니다. 다행히도이 작업을 수행하는 데 도움이되는 간단한 도구가 있습니다. 포크는 git 용어로 마스터와 별개의 마스터와 동일하므로 마스터의 변경 사항을 추적하려면 Forked Repo에서 추적 브랜치를 만들고 무언가를 커밋하고 싶을 때마다 포크의 마스터 브랜치에 해당 변경 사항을 병합 할 수 있습니다. 귀하와 관련된 다른 저장소의 변경 사항을 쉽게 추적 할 수 있도록 설치할 수있는 도구 인 'Github'보석을 적극 권장합니다. 설치 및 사용에 대해서는이 페이지 하단의 readme 텍스트를 참조하십시오. http://github.com/defunkt/github-gem/tree/master

Github Fork 대기열을 무시하십시오 그것은 사악하다! 포크 큐는 기고자로부터 단일 커밋을 선택하고 있지만 전체 지점에서 합병하고 싶지 않은 유지 관리자를위한 도구입니다. 포크 대기열을 가지고 놀면 포크를 손상시킬 수 있습니다 (고정 될 수 있지만 무언가가 잘못되었다). Github의 많은 초보자들은 거기에 많은 상충되는 변화가 있기 때문에 포크 대기열로 무언가를해야한다고 생각합니다. 그들은 포크를 최신 상태로 유지하는 것으로 추정되는 방법을 모릅니다. 포크를 최신 상태로 유지하고 알아보십시오!

Django의 Github 워크 플로우

Django 프로젝트에는 방법에 대한 지침이 있습니다 Github에서 공동 작업 포킹 및 업스트림 변경을 당기는 표준 방법으로 보이는 것을 사용합니다.

다른 초기 포크 구성

Long Nguyen의 게스트 게시물 Github에서 오픈 소스 프로젝트를위한 GIT 저장소 설정 Michael Hartl의 블로그에서 당신이 포기한 github 저장소를 설정하는 흥미로운 방법을 설명합니다. 기사에 따른이 방법의 목표는 다음과 같습니다.

  • 전체 "공식"리포지토리가 포함되도록 리포지토리를 동기화로 유지하십시오.
  • 개발자가 공식 업데이트를 시작할 수 있습니다
  • 마스터 이외의 지점에서 일하는 것을 장려하십시오

다른 팁

기본적으로 3 개의 원격 git repo 톤 고려 사항이 있습니다.

현지에 대한 원격 저장소로 업스트림을 추가 할 수 있습니다.

 git remote add upstream http://github.com/bitprophet/fabric.git

원격 브랜치를보십시오

 git branch -r 

원산지에 존재하지만 더 이상 상류에 존재하지 않는 푸시 (삭제)

 git push origin :anOldBranch

그 다음에

 git remote prune origin

로컬 레포의 지점을 지우려면 (방금 삭제했기 때문에 더 이상 원산지에 존재하지 않음)

원산지와 상류 모두에 존재하는 지점은 동기화되어야합니다 (작업을 원점으로 밀기 전에 업스트림에서 현지 지점을 재건하는 것은 업스트림에 매우 쉬운 풀 요청을하는 좋은 방법이 될 수 있습니다. 당신의 작업을 포함시키기 위해 빠르게 합병해야합니다)

두 개의 먼 저장소를 동기화하기 위해 더 간단한 프로세스/명령/스크립트를 가질 수 있는지 모르겠습니다.

허용 된 답변에서 시나리오 3을 깨끗하게 수행하는 방법을 살펴 보면서이 답변을 발견했습니다. 약간의 파기 후 Git 1.8과 함께 다음을 수행 할 수 있습니다.

git fetch upstream                      ;make sure you have all the upstream changes
git checkout --no-track upstream/0.9    ;grab the new branch but don't track it
git branch --set-upstream-to=origin/0.9 ;set the upstream repository to your origin
git push                                ;push your new branch up to origin
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top