GitHub 풀 요청을 수행하는 방법


283

GitHub에서 호스팅되는 다른 리포지토리에 풀 요청을 생성 및 / 또는 보내려면 어떻게해야합니까?


2
이것이 GitHub 도움말 페이지 에 충분히 설명되어 있지 않습니까?
lanzz

27
@lanzz 아니요, 도움말 페이지에는 몇 가지 유용한 팁이 포함되어 있지 않습니다. 첫 번째 풀 요청을하기 전에 알고 싶습니다 (아래 참조).
VonC

9
물론 Github의 @ianzz 페이지는 "충분하다", 그러나 배울 수있는 많은 방법이있다. 내가하려고했던 것은 초보자 수준의 자습서를 만드는 것입니다. Github의 설명에서 부족한 것으로 판명 된 것은 1) 하나의 소스에 포함되어 있지 않았으며 (두 페이지가 명확하게 연결되어 있지 않음) 2) 간결하지 않았습니다 (이 페이지는 매우 길고 긴 = 압도적입니다), 3) 핵심 섹션에서 인간의 용어로 설명되지 않았습니다. 가르치는 과정에서 숙련 된 교사가 초보자가 모르는 것을 항상 아는 것은 어렵습니다. 초보자의 신발에 자신을 넣는 것이 이것을 쓰는 목표였습니다.
팀 피터슨

12
긴 것은 압도적임을 의미 할 수 있으며, 이는 중단 = 학습 없음을 의미 할 수 있습니다 . 분명히 그들 중 하나가 아닌 많은 길을 통해 "관련 과정을 이해하게"될 수 있습니다. 화염 전쟁을 끝내기 위해 답장 할 필요가 없습니다. 당신이 어디에서 왔는지 이해합니다.
팀 피터슨

8
당신은 당신의 자신의 포크에서 당겨 요청을합니다. 그것은 분명히 내 원래의 가정이 아니 었습니다.
Derek Illchuk

답변:


236

(공식 " GitHub 도움말 '풀 요청 사용'페이지 "
외에도 " GitHub의 분기와 분기 ", " GitHub의 원점과 업스트림의 차이점 "도 참조하십시오.

풀 요청에 대한 몇 가지 팁 :

처음 에 repo를 분기 했다고 가정 하면 소유하고있는 해당 포크에서 수행해야 할 작업은 다음과 같습니다.

  • 브랜치 생성 : 브랜치 에서 수정 사항을 분리합니다. 에서 여러 요청 을 한 번 master에 모으고 혼합하려는 유혹을받을 수 있는 풀 요청을 만들지 마십시오 .
  • 해당 브랜치 리베이스 : 이미 브랜치에서 풀 요청을 한 경우에도 origin/master(패치가 여전히 작동하는지 확인) 맨 위에 리베이스 하면 풀 요청이 자동으로 업데이트됩니다 (아무것도 클릭 할 필요가 없습니다)
  • 해당 분기 업데이트 : 풀 요청이 거부되면 새 커밋을 추가하거나 히스토리를 완전히 다시 실행할 수 있습니다. 기존 풀 요청을 다시 활성화합니다.
  • 해당 분기를 "초점" : 즉, 주제를 "단단하게"하고, 수천 개의 클래스와 모든 앱을 수정하지 말고, 잘 정의 된 기능 만 추가하거나 수정 하여 변경 사항을 작게 유지하십시오 .
  • 해당 분기 삭제 : 일단 승인되면 포크 (및 git remote prune origin) 에서 해당 분기를 안전하게 삭제할 수 있습니다 . GitHub GUI는 pull-request 페이지에서 브랜치를 삭제할 것을 제안합니다.

참고 : 수있는 쓰기 "를 참조 풀-요청 자체를 어떻게 완벽한 풀 요청을 작성하는 "(헤세이 2015, GitHub의)


2016 년 3 월 : 새로운 PR 병합 버튼 옵션 : " 검토 의견 후 풀 요청시 웹 인터페이스에서 Github 스쿼시 커밋? "을 참조하십시오.

스쿼시

리포지토리 관리자는 merge --squash해당 PR 커밋을 선택할 수 있습니다 .


풀 요청 후

마지막 지점 인 2013 년 4 월 10 일부터 " 재 설계된 병합 버튼 "에서 지점이 삭제됩니다.

새로운 병합 버튼

병합 후 분기 삭제도 단순화되었습니다.
추가 단계로 삭제를 확인하는 대신 분기를 삭제할 때 즉시 분기를 제거하고 다시 필요할 때 분기를 복원 할 수있는 편리한 링크를 제공합니다 .

풀 요청을 병합 한 후 분기를 삭제하는 최상의 방법을 확인합니다.


풀 요청과 요청 풀


"인간"에 대한 전자 노트 (sic)

<humour>

그 (풀 요청)은 GitHub에 의해 올바르게 정의되지 않았습니다!

다행스럽게도 진정한 비즈니스 뉴스 조직은 알고 있으며 풀 교체를 'e-note'로 대체하기위한 e-note가 있습니다 .

https://pbs.twimg.com/media/BT_5S-TCcAA-EF2.jpg:large

당신의 repos 경우에 따라서 토리는 전자 노트를 필요로 ... 폭스 비즈니스 물어 . 그들은 알고 있습니다.

</humour>


2
-@ VonC 감사합니다. 내가 말한 것과 내가 말한 것과 어떻게 다른지 지적 할 수있는 코드를 제공해 주시겠습니까? branch대의 master결정은 하나 실제로 사용하는 것이 무엇인가에 대한 이론적 인 솔루션에서 내 / Github에서의 답변을 주셔서 중요한 일처럼 보인다.
팀 피터슨

1
@timpeterson 이 분기 내에서 히스토리를 완전히 변경할 수 있고 풀 요청을 자동으로 업데이트한다는 사실이 핵심입니다. 풀 요청은 최신 업스트림 프로젝트에서 수행되어야하기 때문입니다. 해당 업스트림 리포지토리에 새로운 커밋이있는 경우 브랜치를 그 위에 리베이스하고 (그 브랜치의 히스토리 변경) 포크로 다시 푸시해야합니다. 그러면 동일한 브랜치에 따라 풀 요청이 자동으로 업데이트됩니다.
VonC

4
rebasing 부분을 이해하지 못합니다. 그게 뭐에요? ( 이 페이지 는 로켓 과학처럼 들리지만 그렇지 않다고 생각합니다). 이 시점에서 "리베이스"하는 명령은 무엇입니까?
Camilo Martin

1
당신이 당신의 PR 지점에 있다면 @CamiloMartin, git pull --rebase upstream/master실제로는 괜찮습니다.
VonC

1
@vikramvi master는 분기 한 원래 저장소와 공통된 지점입니다. 그 지점은 항상 원래 저장소를 반영해야합니다. PR의 분기에서 수정 사항을 분리합니다. 마스터는 원래 리포지토리에있는 내용을 파악하고 그 위에 수정 브랜치를 리베이스하여 쉽게 풀 요청을 병합 할 수있는 방법으로 만 사용합니다.
VonC

202

풀 요청을하는 방법을 배우기 위해 Github의 두 개의 별도 도움말 페이지 (아래에 글 머리 기호로 연결됨)를 따랐습니다. 다음 명령 행 명령은 파트 1에 대한 것 입니다. 실제 끌어 오기 요청 인 Part 2 는 전적으로 Github 웹 사이트에서 수행됩니다.

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • 1 부 : 누군가의 저장소 포크 : https://help.github.com/articles/fork-a-repo

    1. 기여하려는 리포지토리 에서 '포크'버튼을 클릭하십시오.이 경우 Dwolla의 PHP 리포지토리 (Dwolla / dwolla-php)
    2. 이 경우, 새로 만든 포크의 URL을 얻을 : https://github.com/tim-peterson/dwolla-php.git (팀-피터슨 /에 Dwolla-PHP)
    3. git clone->cd dwolla-php->git remote->git fetch위 시퀀스를 입력 하여 컴퓨터 어딘가에 포크를 복제하고 (이 경우 "복사 / 붙여 넣기" third_party TimPeterson$) 마스터 리포지토리 (Dwolla / dwolla-php)와 동기화하십시오.
    4. 지역 리포지토리를 변경하십시오.
    5. git add->git commit->git push위 의 순서를 입력 하여 변경 사항을 원격 저장소, 즉 Github의 포크 (tim-peterson / dwolla-php)로 푸시하십시오.
  • 2 부 : 풀 요청 만들기 : https://help.github.com/articles/using-pull-requests

    1. Github 의 포크 웹 페이지 로 이동 하십시오 ( https://github.com/tim-peterson/dwolla-php )
    2. '풀 요청'버튼을 클릭하십시오
    3. 풀-요청에 이름을 지정하고 변경 사항에 대한 세부 사항을 입력 한 후 제출 단추를 클릭하십시오.
    4. 끝났어요 !!

4
-@ alexgray, 나는 bash 프롬프트를 남겼습니다. 예를 들어 Tims-MacBook-Pro:third_party TimPeterson$이것은 초보자를위한 자습서이므로 사용자를 안내하는 데 도움이됩니다.
팀 피터슨

1
예. 감사합니다. 내가 따라갈 수있는 실제 사례. 왜 그 자식 허브가 없습니까?
Sevenearths

이후 git fetch upstream에는 git checkout master다음을 사용하여 업스트림 변경 사항을 로컬 사본과 병합 할 필요가 git merge upstream/master없습니까?
Sparhawk

@Sparhawk 아니요, 변경 사항을 포크에있는 마스터에 병합 할 필요는 없습니다. 다른 리포지토리에 대한 풀 요청은 전적으로 지점을 기반으로 할 수 있습니다. 그러나 일반적으로 갈 때 포크의 마스터를 업데이트하여 "실제"리포지토리로 변경하고 분기 된 리포지토리의 루프로 자주 돌아가는 것이 좋습니다.
ely

1
@HimanshuShekhar 예, 그러나 github 데스크톱 앱 또는 해당 API를 사용해야합니다. 브라우저가 더 쉽습니다.
팀 피터슨

70

풀 요청을하려면 다음 단계를 수행해야합니다.

  1. 끌어 오기 요청을하려는 저장소를 포크하십시오. 저장소 페이지에서 포크 버튼을 클릭하면 github 사용자 이름 앞에 별도의 github 저장소가 있습니다.
  2. 저장소를 로컬 머신에 복제하십시오. 로컬 머신에 설치 한 Github 소프트웨어가이를 수행 할 수 있습니다. 저장소 이름 옆의 복제 단추를 클릭하십시오.
  3. 파일을 로컬로 변경 / 커밋
  4. 변경 사항을 동기화
  5. github 포크 저장소로 이동하여 분기 버튼 옆의 "비교 및 검토"녹색 버튼을 클릭하십시오. (버튼에는 아이콘이 있습니다-텍스트가 없습니다)
  6. 변경 사항을 표시하는 새 페이지가 열리고 끌어 오기 요청 링크를 클릭하면 분기 한 저장소의 원래 소유자에게 요청이 전송됩니다.

이것을 이해하는 데 시간이 걸렸습니다. 이것이 누군가를 도울 수 있기를 바랍니다.


3
풀 리퀘스트를하기 전에 레포를 포크해야한다는 것이 확실하지 않았습니다. 푸시 된 커밋은 공개 쓰기 액세스 권한이있는 보류중인 지점으로 이동하여 거기에서 병합 할 것이라고 생각했습니다. 감사!
Chris Arena

16

사람들이 처음 GitHub 풀 요청을 할 수 있도록 프로젝트를 시작했습니다. 실습 자습서를 통해 첫 번째 PR만들 수 있습니다.

워크 플로우는 다음과 같이 간단합니다.

  • github에서 repo를 포크하십시오.
  • 복제 저장소 버튼을 클릭하여 복제 URL 가져 오기
  • 터미널로 이동하여 실행 git clone <clone url you copied earlier>
  • 변경 사항을 적용 할 지점을 만듭니다. git checkout -b branch-name
  • 필요한 변경
  • 변경 사항을 커밋 git commit
  • GitHub에서 변경 사항을 포크로 푸시하십시오. git push origin branch-name
  • Compare and pull request버튼 을 보려면 GitHub의 포크로 이동하십시오
  • 그것을 클릭하고 필요한 세부 사항을 제공하십시오

15

github.com 계정을 가지고 있지만 명령 행에 "git"을 입력 할 때만 잘못된 오류 메시지가 표시되는 사용자에게는 브라우저에서 모든 작업을 수행하는 방법이 있습니다. :)

  1. Tim과 Farhan이 쓴 것과 동일합니다 : 자신의 프로젝트 사본을 포크하십시오 : 1 단계 : 포크
  2. 몇 초 후에 자신의 분기 된 프로젝트 복사본으로 리디렉션됩니다. 2 단계
  3. 변경해야 할 파일로 이동하여 툴바에서 "이 파일 편집"을 클릭하십시오. 3 단계 : 파일 편집
  4. 편집 후 마스터 브랜치뿐만 아니라 변경 사항을 설명하는 단어 몇 개를 작성한 다음 "변경 사항 커밋"을 작성하십시오 ( "주"프로젝트가 아닌 사용자의 사본이므로). 4 단계 : 변경 사항 커밋
  5. 편집해야하는 모든 파일에 대해 3 단계와 4 단계를 반복 한 다음 프로젝트 사본 의 루트로 돌아가 십시오 . 녹색 "Compare, review ..."버튼을 클릭하십시오 : 5 단계 : 제출 시작
  6. 마지막으로, 요청의 제목과 설명을 다시 확인한 후 "풀 요청 생성"을 클릭 한 다음 "풀 요청 생성"을 다시 클릭하십시오 . 여기에 이미지 설명을 입력하십시오

3

팀 피터슨의 지시를 따랐지만 변경 사항에 대한 지역 지점을 만들었습니다. 그러나 추진 후 GitHub에서 새로운 지점을 보지 못했습니다. 해결책은 push 명령에 -u를 추가하는 것입니다.

git push -u origin <branch>

위의 URL에서 2 개의 사용자 이름을 보셨습니까? 첫 번째는 tim-peterson두 번째입니다Dwolla
팀 피터슨

3
또한 이것은 내 대답에 대한 의견으로 더 좋습니다. 당신은 downvotes를 얻을 수 있습니다.
팀 피터슨

1

PR 브랜치를 설정하는 모든 작업을 수행하는 bash 프로그램을 작성했습니다. 필요한 경우 분기, 업스트림과 동기화, 업스트림 원격 설정 등을 수행하며 수정 사항을 커밋하고 PR을 푸시 및 제출하면됩니다.

실행 방법은 다음과 같습니다.

github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature

여기 에 프로그램 있으며 해당 저장소에는 작동 방식을 이해하려는 경우 동일한 프로세스를 수동으로 수행하는 단계별 가이드와 기능 분기를 최신 상태로 유지하는 방법에 대한 추가 정보도 포함되어 있습니다. 업스트림 마스터 및 기타 유용한 정보를 제공합니다.


0

간단한 GitHub의 끌어 오기 요청웹 인터페이스에서 자식을 사용하지 않고.

  1. GitHub 계정을 등록하고 로그인 한 다음 변경하려는 리포지토리의 페이지로 이동하십시오.
  2. 연필 아이콘을 클릭하십시오.

    위치 근처에서 텍스트를 검색하고 원하는대로 수정 한 다음 미리보기하여 확인합니다. 제안 된 변경 사항에 최대 50 자까지 설명을 제공하고 선택적으로 확장 된 설명을 제공 한 후 파일 변경 제안 단추 를 클릭하십시오 .

  3. 이 글을 읽는다면 저장소 (프로젝트 폴더)에 대한 쓰기 권한이 없으므로 GitHub는 계정에 저장소 사본 (실제로 지점)을 만듭니다. 풀 요청 생성 버튼을 클릭하십시오 .

  4. 풀 요청에 설명을 제공하고 의견을 추가 한 후 풀 요청 생성 버튼 을 클릭 하십시오 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.