누군가가 포크 한 GitHub에 호스팅 된 프로젝트가 있습니다. 포크에 새 분기 “foo”를 만들고 몇 가지 사항을 변경했습니다. “foo”를 내 저장소의 “foo”라는 새 분기로 가져 오려면 어떻게합니까?
본인이 풀 요청을 제출할 수 있음을 이해했지만이 과정을 직접 시작하고 싶습니다.
다음을 가정하십시오.
- 그들이 내 프로젝트를 포크했기 때문에 우리의 두 저장소는 모두 같은 ‘역사’를 공유합니다.
- GitHub가 그들의 프로젝트가 내 프로젝트에서 분기되었다고 표시하지만 내 로컬 저장소에는이 사람의 프로젝트에 대한 참조가 없습니다. 리모컨으로 리모컨을 추가해야합니까?
- 아직 “foo”라는 브랜치가 없습니다. 먼저 수동으로 만들어야하는지 모르겠습니다.
- 나는 이것이 내 주인이 아닌 별도의 지점으로 끌어 들이고 싶습니다.
답변
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo
이것은 로컬 지점을 설정 foo
하고 원격 지점을 추적합니다 coworker/foo
. 따라서 동료가 변경 한 내용을 쉽게 가져올 수 있습니다.
git checkout foo
git pull
의견에 대한 답변 :
Cool 🙂 그리고 해당 분기를 직접 변경하려면 “foo”에서 두 번째 로컬 분기 “bar”를 작성하고 “foo”에서 직접 대신 작업해야합니까?
내가 추천하더라도 새 브랜치를 만들 필요는 없습니다. 또한 foo
동료 에게 직접 커밋 하고 동료가 지점을 가져 오도록 할 수도 있습니다. 그러나 해당 지점이 이미 존재하며 foo
지점을 업스트림 지점으로 설정해야합니다.
git branch --set-upstream foo colin/foo
가정 colin
저장소 유사한 방식으로 정의 (리포지토리 동료에 대한 원격)입니다 :
git remote add colin git://path/to/colins/repo.git
답변
아니요, 리모컨으로 추가하지 않아도됩니다. 그것은 매끄럽고 매번 할 고통입니다.
커밋 잡기 :
git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch
이렇게하면 로컬 분기가 만들어졌으며 해당 분기 ournameforbranch
와 정확히 동일한 이름 이 theirbranch
됩니다. 질문 예제의 경우 마지막 인수는입니다 foo:foo
.
참고 :ournameforbranch
자신의 지점 중 하나와 충돌하지 않는 이름을 생각하는 것은 귀찮은 인 경우 부분은 더 중단 할 수 있습니다. 이 경우 호출 된 참조 FETCH_HEAD
를 사용할 수 있습니다. 당신 git log FETCH_HEAD
은 그들의 커밋을보고 cherry-picked
체리를 커밋하는 것과 같은 일을 할 수 있습니다 .
다시 그들에게 푸시 :
종종, 당신 은 그들의 무언가 를 고치고 그것을 바로 뒤로 밀고 싶어합니다 . 그것도 가능합니다 :
git fetch git@github.com:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD
# fix fix fix
git push git@github.com:theirusername/reponame.git HEAD:theirbranch
에서 작업하는 경우 분리 된 상태 것이 당신을 걱정, 반드시 지점을 사용하여 생성 :ournameforbranch
및 교체 FETCH_HEAD
와 HEAD
와 위 ournameforbranch
.
답변
antak의 답변 인 경우 :
git fetch git@github.com:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
당신에게 제공합니다 :
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
그런 다음 (Przemek D의 조언에 따름) 사용
git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
답변
다음은 다른 사용자의 포크에서 PR 브랜치를 체크 아웃하기 위해 GitHub와 함께 작동하는 멋진 편리한 솔루션입니다. 풀 요청 ID (GitHub가 PR 제목과 함께 표시 함)를 알아야합니다.
예:
당신의 안전하지 않은 코드를 수정 # 8
앨리스는 1로 커밋 병합 싶어 your_repo:master
에서her_repo:branch
git checkout -b <branch>
git pull origin pull/8/head
와 다른 경우 리모컨을 대체하십시오 origin
. 올바른 풀 요청 ID로
대체 8
하십시오.
답변
GitHub는 이전 답변과 관련하여 새로운 옵션을 제공합니다. PR에서 명령 행을 복사 / 붙여 넣기 만하면됩니다.
- PR 하단으로 스크롤하여
Merge
또는Squash and merge
버튼 을 확인 합니다 - 오른쪽의 링크를 클릭하십시오 :
view command line instructions
- 1 단계 오른쪽에있는 복사 아이콘을 누릅니다.
- 터미널에 명령을 붙여 넣기
답변
갈래 리포지가 보호되어 있으므로 직접 푸시 할 수 없으며 목표가 foo를 변경하는 것이라면 분기 foo를 리포지토리로 가져와야합니다.
git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo
git checkout --no-track protected_repo/foo
이제 업스트림이없는 로컬 foo 복사본이 있습니다. 변경 사항을 커밋하거나하지 않고 foo를 자신의 원격 저장소에 푸시 할 수 있습니다.
git push --set-upstream origin foo
이제 foo가 GitHub의 리포지토리에 있고 로컬 foo가 추적하고 있습니다. 그들이 계속 foo를 변경하면 그것들을 가져 와서 당신의 foo로 병합 할 수 있습니다.
git checkout foo
git fetch protected_repo
git merge protected_repo/foo