업스트림 브랜치를 설정하여 로컬 브랜치를 밀어 넣는 방법은 무엇입니까?


11

내가 기억하는 것에서, 예를 들어 지점에서 작업하는 my-feature-branch경우 magit-status메뉴 에서이 작업을 수행 P P한 다음 origin/my-feature-branch맨 위에 있는 목록에서 원격 지점을 선택할 수있었습니다 . 이것은 아름답게 작동했습니다.

최근 에이 토론을 할 때와 비슷한 일을 할 수 있습니다 P -u e(을 열고 깃발을 magit-push-popup설정하고 다른 곳에서 사용) .로 시작하는 지점 목록에서 비슷하게 선택할 수 있습니다 . 이것은 나에게도 잘 작동했습니다. 그러나 더 최근에는 더 이상 작동하지 않으며 업스트림 브랜치를 설정하는 가장 좋은 방법을 찾지 못했습니다.--set-upstreameorigin/my-feature-branch

P e분기에 푸시 할 첫 번째 옵션을 사용 하면 origin/my-feature-branchis는 거의 항상 원하는 것입니다. 그러나 origin/my-feature-branch로컬 지점의 업스트림으로 설정되지 않았습니다 . 를 사용 P u하면 업스트림 분기를 선택할 수 있지만 origin/my-feature-branch목록에 origin/my-feature-branch없으며 탭을 완료하지 않고 입력해야합니다 (단단하지는 않지만 사용자 오류가 발생하기 쉽고 명령 줄보다 느립니다).

이것이 현재 업스트림 지점을 설정하는 유일한 방법입니까, 아니면 뭔가 빠졌습니까? 이 문제와 관련된 다른 토론과 문서를 살펴 보았지만 찾은 모든 출처가 오래된 것 같습니다.


1
나는 생각한다 <remote>/<branch>(참조 부분은 실수 프롬프트에서 제외 된 이 댓글을 ). 그 동안 magit-push-current-set-remote-if-missingnil로 설정할 수 있습니다 .
Kyle Meyer

방금 수정했습니다. 아래 내 대답은 그 수정을 가정합니다.
tarsius

다른 관련 문제를 찾아 수정했습니다. 아래의 모든 것이 100 % 정확하기 전에 Melpa가 따라 오기까지 몇 시간을 기다려야 할 것입니다.
tarsius

답변:


11

밀거나 밀지 않고 동시에 업스트림을 설정하는 방법에는 여러 가지가 있습니다.

이 값 magit-push-current-set-remote-if-missingnil기본값 이 아닌 경우 다음과 같이 표시됩니다.

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

이를 origin/feature업스트림으로 푸시 하고 설정하려면를 누른 u다음 RET기본 완료 후보를 수락하십시오.

magit-push-current-set-remote-if-missingis nil인 경우 대신 다음과 같이 표시됩니다.

Push feature to
 e elsewhere

p지금을 누르면 업스트림이 구성되지 않았다는 메시지가 표시됩니다 (업스트림이 없으면 업스트림으로 푸시 할 수 없음을 의미 함).

하지만 magit-push-current-set-remote-if-missing이며 nil, 다음 스위치 목록 기능을 것입니다 --set-upstream당신이 사용할 수 있도록, P - u p당신이 (두 번째 페이지가 소문자를 제외)에 사용한다. 그러나 한 가지 복잡한 문제가 있습니다. 값을 변경 한 후 magit-push-current-set-remote-if-missingEmacs를 다시 시작 --set-upstream해야 나타나거나 사라집니다.

마지막으로 "set upstream (및 다른 작업은 수행하지 않음)"명령을 사용하여 업스트림을 설정할 수 있습니다 b uorigin/masterRET. 이 방법을 사용할 때는 이미 존재하는 분기 만 선택할 수 있습니다.


그러나 푸시 원격을 구성하고 푸시하는 것이 좋습니다. 푸시-원격과 그것이 업스트림과 어떻게 다른지에 대해 더 배우려면 , 정보 매뉴얼 의 브랜칭 노드를 참조하십시오 (웹 버전은 아직 업데이트되지 않았습니다).

기본적으로 업스트림 브랜치는 피처 브랜치가 합쳐 지거나 (푸시하지 않고 병합 또는 리베이스하여) 브랜치입니다 origin/master. 그리고 푸시-원격은 피처 브랜치를 계속 작업하거나 다른 사람이 병합 할 수 있도록 피처 브랜치를 푸시하는 곳입니다. 로컬 브랜치의 이름이 지정 feature되고 푸시-원격이 인 my-fork경우를 사용하여 해당 브랜치를 P p푸시하면을 푸시합니다 my-fork/feature. "푸쉬 투 브랜치"는 구성 할 수 없으며 푸시 원격의 브랜치 이름은 항상 로컬 이름과 동일합니다.

따라서 귀하의 질문은 "동시에 업스트림으로 푸시하는 방법, 업스트림을 동시에 구성하는 방법"과 같은 것이었지만 권장 사항은 전혀 업스트림으로 푸시하지 않고 대신 푸시 원격으로 푸시하는 것입니다.

값을 변경하지 않은 경우을 magit-push-current-set-remote-if-missing사용하여 푸시 원격을 구성 할 수 있습니다 P psome-remoteRET. 그러나 모든 기능 분기를 동일한 리모컨으로 푸시 할 수 있으므로 모든 분기에 대해 푸시 원격을 한 번 설정하고 완료 b한 다음 M-p올바른 리모컨을 선택할 때까지 수행하는 것이 좋습니다.


또한 일반적으로 업스트림 브랜치를 명시 적으로 설정할 필요는 없습니다. 새 브랜치를 만들고 원격 브랜치를 시작점으로 선택하면 업스트림으로 사용됩니다.

불행히도 시작점은 일반적으로 로컬 브랜치이며,이 경우 Git은 기본적으로 업스트림으로 사용하지 않습니다. 그러나 이것을 한 번 실행하면 쉽게 해결할 수 있습니다.

git config --global branch.autoSetupMerge always

기본값 true은 " 원격 지점 인 경우 시작 지점을 업스트림으로 설정"을 의미 합니다.


그건 그렇고, 푸시 원격에 동일하게 적용됩니다. 그것도 보통 "새로운"저장소에서 반자동으로 설정되어야합니다. 리포지토리를 복제 origin하면 푸시 원격 으로 사용할지 묻는 메시지가 표시됩니다 . my-fork푸시 리모컨으로 사용해야하는 다른 리모컨을 추가하지 않는 한 "예"라고 대답 해야합니다. 당신이 사용하여 새 원격를 추가 할 때 M aremote.pushDefault아직 설정되어 있지 않은 경우, 당신은 당신이 새로 푸시 - 원격으로 원격 추가 사용할지 여부를 묻는 메시지가 표시됩니다.

이를 사용하여 구성 할 수 있습니다 magit-clone-set-remote.pushDefaultmagit-remote-add-set-remote.pushDefault.

다른 고급 옵션은 magit-branch-prefer-remote-upstream이며 기본값은 nil입니다. 로 설정 t한 다음 새 분기의 시작점으로 로컬 분기를 선택하면 시작 규칙 의 업스트림 (일부 규칙에 따라 doc-string 참조) 대신 업스트림으로 사용될 수 있습니다. 시작점 자체.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.