GitHub에서 포크 간 병합


259

GitHub 리포지토리를 분기했습니다. 그런 다음 포크에 몇 가지 변경 사항을 적용했습니다. 그런 다음 원래 리포지토리가 내 변경 내용과 일부를 병합했습니다. 이제 누락 된 변경 사항을 병합하고 싶습니다. 간단한 pull과 push를 시도했지만 커밋이 중복되었습니다. 가장 좋은 방법은 무엇입니까?

답변:


352

각 저장소마다 "원격"이있을 수 있습니다. 하나의 리모콘에서 다른 쪽을 밀어야합니다.

원래 포크에서 복제 한 경우 해당 리모콘을 "원본"이라고합니다. 아직 추가하지 않은 경우 첫 번째 사람의 저장소를 다른 리모트로 추가해야합니다.

git remote add firstrepo git://github.com/first/repo.git

모든 설정이 완료되면 실제로

git pull firstrepo master
git push origin

기억, git pull수행하는 매크로에 불과하다 git fetchgit merge그 순서. 첫 번째 사람의 저장소에서 커밋 목록을 가져온 다음 분기를 트리에 병합하면됩니다. 합병은 두 지점에서 커밋으로 올바른 일을해야합니다.

GitHub는 모든면에서 굉장히 뛰어나며 바로 가기를 제공합니다. 저장소의 포크에는 "빨리 감기"버튼이있어 다른쪽에 완전히 합쳐져 있으면 포크를 잡을 수 있습니다.


1
원격 작업으로이 작업을 수행하는 방법이 있습니까? 올바르게 이해하면이 방법을 사용하여 모든 변경 사항을 로컬 리포지토리에 다운로드 한 다음 github의 포크로 다시 업로드 (푸시)합니다. 오히려 모든 변경 사항을 github의 포크로 직접 가져옵니다.
Ken Liu

1
아니요. Git은이를 지원하지 않습니다. 다행히도 Github는 이제 웹 인터페이스에 병합 버튼이 있습니다.
cweiske

13
@cweiske-이 병합 버튼은 어디에 있습니까? 관리자 페이지와 메인 페이지를 모두 살펴 보았지만 찾을 수 없습니다 :(.
Adam

2
@Adam, Pull Request 페이지에 있습니다. 따라서 forker는 풀 요청을 열어 지점 중 하나를 귀하의 지점 중 하나로 병합합니다. 거기에서 당신은 병합 버튼을 클릭 할 수 있습니다.
Rob Barreca

2
빨리 감기 버튼을 더 이상 사용할 수없는 것 같습니다. 자세한 내용을 보려면 명령 내에서 다른 자식 URL 을 사용했습니다 .git remote add snaury git@github.com:snaury/script-runner
olibre

72

따라서 위의 대답은 완벽하게 작동하지 않았습니다. 즉, 작동했을 때 원래 github 작성자와의 연결이 끊어지고 그 후에는 더 이상 작동하지 않는 것 같습니다. 문제는 원격 이름과 지점 사이에 /가 생략되어 있다고 생각합니다. 따라서 원격에서 master라는 분기를 가져 오지만 아무것도 할 수 없습니다. 왜 그런지 잘 모르겠습니다.

github이 사이트에서 권장 하는 방식은 다음과 같습니다 .

갈래 리포지토리를 복제 한 후에는 이전 답변과 같이 원본을 가리키는 원격을 추가해야합니다. 그들은 그것을 상류라고 부르고 싶지만 중요하지 않습니다.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

그런 다음 가져옵니다

git fetch upstream

병합 할 수있는 버전이 표시됩니다

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

그런 다음 병합하려는 지점을 선택하기 만하면됩니다. 로컬 지점이 아니라 리모컨 아래에 저장됩니다. 그러나 업스트림 / 마스터라고하는 로컬 지점이없는 경우 (허용되는) 아래 줄과 잘 병합해야합니다.

git merge upstream/master

또는이 줄을 사용하여 페치 / 병합 (최초 페치 후)을 단축 할 수 있습니다.

git pull upstream/master

문제는 이미 변경 사항이있는 경우 통합 한 변경 사항으로 인해 병합 커밋이 생성된다는 것입니다. 어떤 경우에는 유용하지만 대부분 무의미합니다.
Pablo Olmos de Aguilera C.

1
이 경우에는 git rebase훨씬 더 잘 작동하고 빈 병합 커밋은
생략합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.