Github에서 풀 요청을 기본값이 아닌 다른 브랜치에 병합


122

풀 요청이 Github에서 호스팅되는 내 저장소로 들어옵니다. 기본적으로 master분기 로 병합됩니다 .

변경 사항을 병합 할 분기를 변경할 수있는 방법이 있습니까?

답변:


86

2016 년 8 월 15 일부터 GitHub에서는 GUI를 통해 pull 요청의 대상 분기를 변경할 수 있습니다. Edit제목 옆을 클릭 한 다음 드롭 다운에서 분기를 선택합니다.

스크린 샷

이제 열린 풀 요청의 기본 분기를 변경할 수 있습니다. 풀 요청을 생성 한 후 풀 요청의 변경 사항이 다른 브랜치와 비교되도록 기본 브랜치를 수정할 수 있습니다. 올바른 기본 브랜치로 새 요청을 여는 대신 원래 풀 리퀘스트의 기본 브랜치를 변경함으로써 귀중한 작업과 토론을 유지할 수 있습니다.


1
이것이이 질문에 대한 정답이어야합니다 (예 : GitHub로 업그레이드 한 후).
stuxnetting

이 기능은 더 이상 존재하지 않는 것 같습니다 (2018 년 2 월 15 일 기준)? 최근 풀 요청에서 대상 브랜치는 더 이상 버튼이 아닌 소스 저장소 / 브랜치와 밝은 파란색 배경에 동일한 파란색 글꼴로 표시됩니다.
cgogolin

12
아! 그렇습니다! 먼저 "편집"을 클릭해야합니다 (위의 스크린 샷에서 명확하지 않음). 나는 이것을 간과했다. 죄송합니다.
cgogolin

@cgogolin 지적 해 주셔서 감사합니다. 귀하의 의견을 읽고 편집 버튼을 클릭 할 때까지 저도 혼란 스러웠습니다.
mhucka

Github는 "풀 요청의 기본 브랜치를 변경하면 일부 커밋이 타임 라인에서 제거 될 수 있습니다."라고 경고 합니다. 및 "이전 기본 브랜치의 일부 커밋이 타임 라인에서 제거 될 수 있습니다." 이것이 무엇을 의미하는지 아십니까?
Matthias Fripp 19

55

제출자는 풀 요청을 발행 할 때이를 변경할 수 있지만 일단 발행하면 변경할 수 없습니다.

반면에, 수동으로 브랜치와 푸시를 병합 할 수 있는데, 잘못 타겟팅 된 풀 요청에 대해 반 정기적으로 수행합니다.

풀 리퀘스트의 구성 요소로 작업하는 데 hubgem이 도움 이 될 수 있습니다 .

이 gem은 다음과 같은 수동 프로세스를 마무리합니다.

  1. 로컬 체크 아웃에 포크 용 리모컨추가하십시오 .
  2. 리모콘 가져와.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...

1
수동으로 병합하고 푸시하면 Github에서 pull 요청이 효과적으로 완료되었음을 인식합니까? 원격 분리 저장소 (포크)에서 병합하는 방법에 대한 포인터가 있습니까?
eoinoc

3
확실하지는 않지만 직접적으로는 아닙니다. 변경 사항이 대상 브랜치에 병합되지 않았기 때문에 풀 요청이 정의 된대로 완료되지 않았기 때문입니다. 수동으로 닫아야합니다. 포인터에 대해서는 편집 된 주석을 참조하십시오.
Daniel Pittman 2012

git merge --no-ff ...@GuillermoMansilla가 그의 답변에서 언급 한대로 사용 하는 것이 좋습니다 .
jjmontes

3
"일단 발행하면 변경할 수 없습니다."-2016 년 8 월 현재는 더 이상 그렇지 않습니다! 아래 @maliayas의 대답을 참조하십시오 stackoverflow.com/a/38985999/12484
존 슈나이더

1
오늘 (2017 년 3 월 3 일)이 절차를 따랐습니다. 풀 리퀘스트를 다른 브랜치로 다운로드하고 추가 수정을 한 다음 마스터로 병합했습니다. pull 요청의 커밋이 마스터로 끝나면 GitHub는 자동으로 pull 요청을 닫습니다.
이반 Krivyakov

14

다른 답변에서 언급 한 허브 gem을 사용하는 대안 은 명령 줄을 사용하여 로컬 풀 요청을 병합 하는 것입니다.

$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*

위의 명령은 .git/config파일에 다음 줄을 먼저 추가 한 경우에만 직접 작동 합니다.

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*

그것은 당신이 모든 풀 리퀘스트 를 다운로드 할 수있게 해준다 . 거대한 리포지토리에는 바람직하지 않을 수 있으므로 GitHub는 git fetch origin pull/ID/head:BRANCHNAME구문 을 특징으로하는 지침을 수정하여 구성 파일의 수정을 방지하고 해당 단일 풀 요청 만 다운로드합니다.


8

자신의 것이 아니기 때문에 기존 풀 요청을 변경할 수는 없지만 관련 소스 저장소가 여전히 존재하면 쉽게 새 요청을 만들 수 있습니다. 예, 다른 사람의 것이더라도 가능합니다.

제출자의 리포지토리로 이동 한 다음 동일한 커밋을 사용하여 리포지토리에 새 풀 요청을 생성하지만 올바른 대상 브랜치를 올바르게 설정했는지 확인합니다.

그런 다음 자신의 저장소로 돌아가 새로운 풀 요청을 수락합니다. 짜잔!


저장소를 변경 한 경우에도 작동합니까? "동일한 커밋"임을 어떻게 보장합니까?
ragerdl 2014 년

@ragerdl- '분기 별 기능'모델을 사용하여 개발하는 경우 업스트림 분기에 대한 분기가있는 PR을 만들 수 있으며 동일한 커밋을 포함해야합니다.
geerlingguy

2
로컬 저장소에 액세스하지 않고 GitHub에서 직접 수행 할 수있는 유일한 방법입니다.
kopischke

8

Daniel Pittman의 솔루션에는 아무런 문제가 없지만 이러한 병합을 "빨리 감기 없음"으로 간주합니다. 즉, 3 단계를 다음과 같이 변경합니다.

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}

를 사용 --no-ff하면 기록을 더 쉽게 읽을 수 있습니다. $n커밋이에서 나왔다고 명확하게 말하고 $branch해당 브랜치에서 수행 한 작업을 되돌려 야하는 경우 생활이 더 쉬워집니다.

또한 eoinoc의 질문에 답하고 추가 팁을 제공하려면 :

병합을 수행하면 git cli가 메시지를 작성하라는 메시지를 표시합니다. 일반적으로 다음과 같은 일반적인 메시지가 표시됩니다.

원격 추적 분기 '사용자 / 자신의 분기'를 분기에 병합

해당 메시지를 편집하고 풀 요청 번호에 대한 참조를 포함해야합니다. 즉 : (풀 요청 번호가 123이라고 가정)

원격 추적 분기 '사용자 / 자신의 분기'를 분기에 병합

refs # 123 무엇이든 해결 ...

따라서 다음에 github issues / pull-requests 페이지를 방문하여 특정 pull 요청을 확인하면 병합을 수행 한 위치를 커밋 할 수있는 링크가있는 메시지가 표시됩니다.

여기 제가 의미하는 바의 스크린 샷이 있습니다.

여기에 이미지 설명 입력


6

그렇게하려면 저장소의 홈 페이지로 이동하여 브랜치를 클릭하고 기본 브랜치를 master에서 다른 것으로 변경합니다 (제 경우에는 "dev").

그 후 누군가가 풀 리퀘스트를 생성 할 때마다 merge버튼은 요청을 마스터가 아닌 "dev"로 자동 병합합니다.

여기에 이미지 설명 입력


오타 수정 @the 주석 남자 I 감사는 감사
abbood

4
조정 / 편집에 대해 감사 할 필요가 없습니다. 우리가 사이트를 위해하는 일입니다. 좋은 답변을 계속 써주세요. 충분히 감사합니다.
The Tin Man
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.