git으로 GitHub 풀 요청을 어떻게 확인할 수 있습니까?


251

이전에 생성 된 풀 요청 (GitHub 웹 인터페이스를 통해 생성 됨)을 확인하고 싶습니다. refs / pull 또는 refs / pull / pr이있는 다른 장소를 검색하고 찾았습니다.

그러나 fetch = +refs/pull/*/head:refs/remotes/origin/pr/*git config 파일에 추가 하고 git fetch를 수행하면

내가 뭘 잘못하고 있니? GitHub가 pull / xyz 항목을 자동으로 생성해야합니까, 아니면 무언가를 구성해야합니까?


구성 파일의 전체 원격 섹션은 어떻게 생겼습니까?



이 질문에 끝났지 만 실제로 stackoverflow.com/q/1783405/2413303
EpicPandaForce가

1
두 번째 단락은 완전한 문장이 아닙니다. "그러나 ...을 추가하고 git fetch를 할 때"-이런 일을 할 때 어떤 일이 발생합니까?
cp.engr

답변:


385

로컬 PR에 원격 PR을 가져 오려면

git fetch origin pull/ID/head:BRANCHNAME

여기서 IDpull 요청 ID BRANCHNAME는 작성하려는 새 분기의 이름입니다. 지점을 만들면 간단히

git checkout BRANCHNAME

자세한 내용은 공식 GitHub 설명서 를 참조하십시오.


11
나는 이것을 업스트림 저장소에서 로컬 포크 저장소로 PR을 가져 오기 위해 사용했다.
Jngai1297

18
내 명령은 마치 git fetch origin pull/1/head:githubusername내가 기대했던 것이 아닌 것처럼
Anthony

1
되 돌리는 방법?
fico7489

8
@Antoine BRANCHNAME은 지점의 이름을 지정하는 것입니다. 이미 존재하고 (예 :) master작동하지 않는 이름을 사용하려고 시도한 것 같습니다. 따라서 해당 이름의 분기가 아니기 때문에 작동하는 사용자 이름을 시도했습니다. 아마도 나는 당신이 말한 것을 오해 할 것입니다.
Nateowami 2016 년

1
로컬 리포지토리를 origin포크와 upstream원래 리포지토리 를 가리키는 방식으로 구성한 경우가 있습니다 ( 예 : help.github.com/articles/configuring-a-remote-for-a-fork ). 변경 확인 originupstream원래의 repo에서 끌어 오기 요청을 인출 할 경우, 언급 된 명령.
mvlabat

127

분기 이름을 지정하지 않아도 가져옵니다.

git pull origin pull/939/head

머신에서 특정 풀 요청을 받으려면 어떻게해야합니까?


이것으로 충분합니다, tks
rll

이것은 나를 위해 일했습니다. timbo의 fetch 메소드는 옳지 않은 일을했습니다
malhal

30
예를 들어 마스터 브랜치에서이 작업을 수행하면이 브랜치에 직접 커밋됩니다. 풀 요청을 스테이징을 위해 별도의 브랜치로 가져 오려면 @timbo의 답변을 시도하십시오.
피닉스

3
@ 피닉스가 말한 것을 Ditto. 풀 요청 분기가 마스터가 아닌 자체 분기에서 내 컴퓨터에 복제되기를 원합니다.
Paul Chernoch

나중에 풀 요청에서 변경 사항을 로컬 브랜치로 가져 오려는 경우에도 작동합니다.
luator

52

그 요점 은 git fetch를 할 때 일어난 일을 설명합니다.

분명히 github url을 프로젝트의 URL과 일치하도록 변경하십시오. 다음과 같이 보입니다.

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

이제 모든 풀 요청을 가져옵니다.

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...

특정 풀 요청을 확인하려면 다음을 수행하십시오.

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'

해당 작업을 자동화하기 위해 문제 259 에 나열된 다양한 스크립트가 있습니다 . 자식 - 엑스트라의 프로젝트는 명령 제안 (구현 PR 262 )
git-pr

git-pr(1)-풀 요청을 로컬로 체크 아웃

개요

git-pr <number> [<remote>]
git-pr clean

기술

GitHub 풀 요청 번호를 기반으로 로컬 브랜치를 생성 한 후 해당 브랜치로 전환합니다.

가져올 원격의 이름입니다. 기본값은 origin입니다.

실시 예

풀 요청 226origin다음 에서 확인합니다 .

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'

38

로컬 브랜치를 만들지 않고 페치 및 체크 아웃 하고 HEAD 분리 상태있는 것을 선호합니다 . 불필요한 로컬 브랜치로 로컬 시스템을 오염시키지 않고 풀 요청을 신속하게 확인할 수 있습니다.

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

여기서 IDpull 요청 ID upstream는 어디에 있고 원래 pull 요청은 어디에서 만들어 졌는가 ( origin예 :) 일 수 있습니다 .

도움이 되길 바랍니다.


1
나는이 해결책을 좋아한다. 장점 중 하나는 PR이 더 많은 커밋으로 업데이트되면 다시 실행하면 새로운 커밋이 시작된다는 것입니다.
Alex Johnson

14

Steven Penny의 답변을 참조하면 테스트 브랜치를 만들고 PR을 테스트하는 것이 가장 좋습니다. 여기 당신이 할 일이 있습니다.

  1. PR을 로컬로 병합 할 테스트 분기를 작성하십시오. 마스터 브랜치에 있다고 가정합니다.

git checkout -b test

  1. 테스트 브랜치로 PR 변경 사항 가져 오기

git pull origin pull/939/head:test

이제이 로컬 테스트 브랜치 (이 경우 test ) 의 변경 사항을 안전하게 테스트 할 수 있으며 일단 만족하면 GitHub에서 평소대로 병합 할 수 있습니다.


1
작업 트리를 만들고 새 test브랜치로 설정 한 다음 PR을 가져 와서 더 나은 방법으로 갈 것입니다. 이렇게하면 완료된 지점을 로컬로 복원 할 필요가 없습니다. 작업 트리를 폐기합니다. 사실 나는 checkout -b더 이상 더 이상 존재하지 않습니다. 항상 작업 트리를 만든 다음 분기합니다. 디스크가 싸다. 물론이 작업을 수행하는 스크립트가 있습니다. 필요한 모든 명령을 개별적으로 입력하지는 않습니다.
mpersico

11

Github.com을 사용하는 경우 "풀 요청"으로 이동하여 관련 풀 요청을 클릭 한 다음 "명령 줄 지침"링크를 클릭하십시오. Github.com의 명령 줄 지침


실제로, github.com을 볼 때 PR의 새 / 변경된 파일을 다운로드하는 방법이 실제로 있습니까? 따라서 github에서 repo를 볼 때 편리한 "zip으로 다운로드"버튼을 클릭하거나 실제로 클릭하여 프로젝트의 각 (전체) 파일을 볼 수 있습니다. PR의 경우 클릭하여 "파일을 보는"방법을 알 수 없습니다. 무슨 의미인지 아십니까? 뭔가 빠졌습니까? 건배!
Fattie

9

저장소에서 풀 요청을 가져 오기 위해 git configcommand를 사용 하여 새 규칙을 작성할 수 있습니다 .git/config.

$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

그리고 그냥 :

$ git fetch origin
Fetching origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/3/head -> origin/pr/3

8

위의 옵션 중 일부의 문제점은 PR을 연 후 누군가가 PR에 더 많은 커밋을 푸시하면 최신 버전을 제공하지 않는다는 것입니다. 나에게 가장 효과가 있었던 것은 PR로 이동하여 'Commits'를 누르고 맨 아래 로 스크롤 하여 가장 최근의 커밋 해시를 확인한 여기에 이미지 설명을 입력하십시오 다음 git checkout을 사용하십시오.

git checkout <commit number>

위의 예에서

git checkout 0ba1a50


2
stackoverflow.com/a/30584951/659732에git fetch origin pull/ID/head:BRANCHNAME 언급 된 접근 방식 으로이 문제를 정확히 맞았습니다 . 솔루션 주셔서 감사합니다!
joewiz

6

github의 도구 인 hub를 사용하고 있습니다 : https://github.com/github/hub

허브가 풀 요청을 로컬로 체크 아웃하는 것은 다소 쉽습니다.

hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234

5

Bitbucket의 경우 단어 pull를로 바꿔야합니다 pull-requests.

먼저 git ls-remote origin명령으로 풀 요청 URL 스타일을 확인할 수 있습니다 .

$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...

보시다시피 refs/pull-requests/1503/from대신refs/pull/1503/from

그런 다음 모든 답변의 명령을 사용할 수 있습니다.


4

실수로 git-extras가 제공 한 것과 거의 똑같이 작성했습니다. 따라서 다른 많은 추가 명령을 설치하는 대신 단일 사용자 정의 명령을 선호하는 경우이 git-pr파일을 어딘가에 배치 하면$PATH 다음과 같이 작성할 수 있습니다.

git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1

4

"github fork"워크 플로우를 따르는 경우, 포크를 작성하고 원격 업스트림 저장소를 추가하십시오.

14:47 $ git remote -v
origin  git@github.com:<yourname>/<repo_name>.git (fetch)
origin  git@github.com:<yourname>/<repo_name>.git (push)
upstream        git@github.com:<repo_owrer>/<repo_name>.git (fetch)
upstream        git@github.com:<repo_owner>/<repo_name>.git (push)

현재 지점으로 가져 오기 위해 명령은 다음과 같습니다.

git pull upstream pull/<pull_request_number>/head

새 분기로 가져 오려면 코드는 다음과 같습니다.

git fetch upstream pull/<pull_request_number>/head:newbranch

3

Github는 최근에 cli 유틸리티를 출시했습니다 github-cli . 설치 후, id를 사용하여 풀 요청의 분기를 로컬로 체크 아웃 할 수 있습니다

예 : gh pr checkout 2267

이 패키지는 아직 베타 버전입니다.


1

원격 PR 지점을 로컬 지점으로 가져옵니다.

git fetch origin ‘remote_branch’:‘local_branch_name’

로컬 지점의 업스트림을 원격 지점으로 설정하십시오.

git branch --set-upstream-to=origin/PR_Branch_Name local_branch

로컬 변경 사항을 PR 지점으로 다시 푸시하려는 경우

git push origin HEAD:remote_PR_Branch_name


0

출발지와 업스트림 정보가 아래와 같다고 가정합니다.

   $ git remote -v
   origin  git@github.com:<yourname>/<repo_name>.git (fetch)
   origin  git@github.com:<yourname>/<repo_name>.git (push)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (fetch)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (push)

당신의 지점 이름은

   <repo_owner>:<BranchName>

그때

   git pull origin <BranchName>

일을 할 것이다


코드를 공유 할 때 코드를 설명해보십시오
Yunus Temurlenk

-3

커밋이 포크 리포지토리의 마스터 브랜치에 있다면 다음을 수행 할 수 있습니다.

git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.