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.