포크가있는 GitHub의 프로젝트에는 작성자가 아직 가져 오지 않은 포크로 끌어 오기를 원하는 새로운 끌어 오기 요청이 있습니다.
다른 포크에서 내 포크로 풀 요청을 적용하는 간단한 방법이 있습니까? 여기에 내가 놓친 다른 것이 있습니까?
포크가있는 GitHub의 프로젝트에는 작성자가 아직 가져 오지 않은 포크로 끌어 오기를 원하는 새로운 끌어 오기 요청이 있습니다.
다른 포크에서 내 포크로 풀 요청을 적용하는 간단한 방법이 있습니까? 여기에 내가 놓친 다른 것이 있습니까?
답변:
수동으로 쉽게 할 수 있습니다.
다른 포크를 리포지토리의 원격으로 추가하십시오.
git remote add otherfork git://github.com/request-author/project.git
그의 repo의 커밋을 가져옵니다
git fetch otherfork
풀 요청을 적용하는 두 가지 옵션이 있습니다 (선택 1을 선택하지 않으려는 경우).
오리진과 풀 요청 사이에 추가 된 최종 커밋을 적용하는 데 신경 쓰지 않는다면 풀 요청이 형성된 브랜치를 리베이스 할 수 있습니다.
git rebase master otherfork/pullrequest-branch
풀 요청에서 커밋 만 원할 경우 SHA1을 식별하고 수행하십시오.
git cherry-pick <first-SHA1> <second-SHA1> <etc.>
git pull URL branchname
github 웹 페이지를 통해이 작업을 수행 할 수도 있습니다.
나는 당신이 이미 관심 있는 포크 ( ) 로부터 보류중인 풀 요청을 가지고있는 MyFork
일반적인 repo ( BaseRepo
) 의 포크 ( )를 가지고 있다고 가정합니다 OtherFork
.
OtherFork
)로 가져 오려는 풀 요청을 시작한 포크 ( MyFork
) 로 이동하십시오.OtherFork
OtherFork
지점도 선택해야합니다 . 왼쪽 포크를 포크 ( MyFork
) ( 중요 )로 선택하십시오.View pull request
이로 변경되어야합니다 Create pull request
. 이것을 클릭하십시오.이제 포크 ( MyFork
) 에 보류중인 풀 요청이 있어야합니다 . 간단하게 수락 할 수 있습니다.
OtherFork
오른쪽 '비교'드롭 다운에서에서 만든 풀 요청에 해당하는 분기를 선택 했습니다. 그런 다음 풀 요청을 만들 수있는 것처럼 왼쪽을 기본 포크로 선택했습니다.
Tekkub가 이전에 말했듯이 지점을 직접 가져올 수 있습니다. GitHub를 사용하는 대부분의 경우 지점은 요청하는 사용자의 프로젝트 포크에서 단순히 "마스터"입니다.
예: git pull https://github.com/USER/PROJECT/ BRANCH
그리고 실제적인 예로서 :
safaribooks라는 github 프로젝트를 분기하고 원래 프로젝트에서 포크에 넣고 자하는 다음 풀 요청이 있다고 가정하십시오.
그런 다음 포크의 복제 된 프로젝트 폴더에서 다음을 실행하십시오.
git pull https://github.com/fermionic/safaribooks.git fix-str-decode
git pull https://github.com/{upstream/project} refs/pull/{id}/head
대신 사용하는 것이 좋습니다.
프로젝트에 대한 끌어 오기 요청은 여러 다른 작성자 (포크)의 요청 일 수 있으며 각 포크마다 별도의 리모콘을 원하지 않을 것입니다. 또한 풀 요청을 제출할 때 작성자가 사용한 브랜치 또는 작성자의 마스터 브랜치에 무엇이 있을지에 대해 어떤 가정도하고 싶지 않습니다. 따라서 다른 포크에 표시되는 것이 아니라 업스트림 저장소에 표시되는 풀 요청을 참조하는 것이 좋습니다.
1 단계:
git remote add upstream <url>
이미이 단계를 수행했을 수도 있지만 그렇지 않은 경우 업스트림 프로젝트에 대해 원격을 정의해야합니다. URL은 분기 한 프로젝트의 복제 URL입니다. 에서 더 많은 정보 포크에 대한 원격 구성 및 포크를 동기화 . upstream
리모컨에 부여한 이름이며, 다른 이름 일 수도 있지만 upstream
일반적인 이름입니다.
2 단계:
git pull upstream refs/pull/{id}/head
... {id}
풀 요청 번호는 어디에 있습니까 ? upstream
1 단계를 정확하게 수행 한 경우 "upstream"과 같이 가져올 리모콘의 이름입니다. URL 일 수도 있습니다.이 경우 1 단계를 건너 뛸 수 있습니다.
3 단계 :
병합 커밋에 대한 커밋 메시지를 입력하십시오. 풀 요청 번호, 수정되는 문제 및 간단한 설명과 함께 멋진 한 줄 요약을 제공하는 것이 좋지만 기본값을 유지할 수 있습니다.
Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
git pull upstream refs/pull/{id}/head
커밋을 로컬 FETCH_HEAD
git log ..FETCH_HEAD
git merge FETCH_HEAD
나를 위해 일한 더 자세한 정보.
분기 저장소에 대한 내 .git / config 파일은 다음과 같습니다.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = git@github.com:litzinger/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "source"]
url = git://github.com/revolunet/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/source/*
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
그런 다음 "git fetch source"를 실행하면 포크 리포지토리의 모든 풀 요청이 나열됩니다.
* [new ref] refs/pull/54/head -> origin/pr/54
* [new ref] refs/pull/67/head -> origin/pr/67
* [new ref] refs/pull/69/head -> origin/pr/69
* [new ref] refs/pull/71/head -> origin/pr/71
그런 다음 특정 풀 요청을 병합하려면 "git merge master origin / pr / 67"을 실행하십시오.
refs/pull/
네임 스페이스 .
smartgit.branch.otherRefs=notes;pull
에 따라 smartgit.properties에 syntevo.com/doc/display/SG/System+Properties - 당신은 또한 그들을 병합 할 수 있습니다 .
나는 이것을 위해 편리한 멋쟁이 스크립트를 사용합니다. 다음을 입력하여 스크립트를 실행합니다.
git prfetch upstream
업스트림 포크에서 모든 풀 요청을 가져옵니다.
스크립트를 만들려면 파일을 만드십시오 ~/bin/git-prfetch
.
파일에는 다음이 포함되어야합니다.
#!/bin/bash
if [ -z "$1" ]; then
echo "Please supply the name of a remote to get pull requests from."
exit 1
fi
git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*
다음을 설정하여 경로에 스크립트가 포함되어 있는지 확인하십시오.
export PATH="$HOME/bin:$PATH"
이 파일을 추가 ~/.bashrc
하여 변경 사항을 영구적으로 만들 수 있습니다.
이제 풀 요청을 받으려는 포크를 추가하십시오.
git remote add upstream https://github.com/user/repo.git
그리고
git prfetch upstream