콘텐츠로 이동

GitHub 원격 저장소와 로컬 브랜치 이름 불일치 해결 방법

로컬 branch와 remote-tracking branch의 이름이 달라도 올바른 upstream이 설정되어 있으면 새 branch가 매번 생성되지는 않습니다. 의도하지 않은 생성은 refspec, upstream과 push.default 조합에서 발생할 수 있습니다. 이 문제를 해결하고 일관성을 유지하기 위한 여러 방법을 알아보겠습니다.

적용 범위와 완료 기준

  • 범위: Git 버전, remote 이름, push.default, branch.*.merge, 현재 branch와 GitHub branch-protection 규칙을 확인합니다. 원격 추적은 Git 설정이며 hosting UI의 branch 이름과 구분합니다.
  • 전제: 명령 전 HEAD, working tree, upstream과 target ref를 기록하고 새 원격 branch 생성 또는 이름 변경이 허용되는지 확인합니다.
  • 실패 조건: 잘못된 remote/ref에 push, 의도하지 않은 새 branch, force update, 보호 규칙·권한 오류와 열린 PR 연결 변경을 포함합니다.
  • 완료 기준: local branch가 의도한 remote-tracking ref를 가리키고 dry-run 또는 실제 push 결과와 hosting UI의 target이 일치할 때 완료입니다.

업스트림 브랜치 설정하기

로컬 브랜치와 원격 브랜치를 명시적으로 연결하면 이름이 달라도 올바른 위치로 push할 수 있습니다.

기존 브랜치 연결하기

git branch --set-upstream-to=origin/원격브랜치명 로컬브랜치명

예를 들어, 로컬 브랜치 이름이 'feature'이고 원격 브랜치 이름이 'new-feature'인 경우:

git branch --set-upstream-to=origin/new-feature feature

이 명령어를 실행하면 로컬 브랜치 'feature'가 원격 브랜치 'new-feature'를 추적하게 됩니다[8].

브랜치 이름 일치시키기

문제의 근본 원인인 이름 불일치를 해결하는 방법입니다.

로컬 브랜치 이름 변경하기

git branch -m 기존브랜치명 바꿀이름

원격 브랜치와 동일한 이름으로 변경하여 일관성을 유지할 수 있습니다[10].

명시적 Push 방법 사용하기

매번 push할 때 명시적으로 원격 브랜치를 지정할 수 있습니다.

git push origin 로컬브랜치명:원격브랜치명

이 방법은 한 번만 사용하는 경우에 적합하며, 매번 긴 명령어를 입력해야 하는 단점이 있습니다[10].

Git 설정 변경하기

자동 업스트림 설정 활성화 (Git 2.37 이상)

git config --global push.autoSetupRemote true

이 설정을 활성화하면 처음 push할 때 자동으로 upstream 브랜치를 설정해줍니다. 이후부터는 단순히 git push만 실행해도 올바른 원격 브랜치로 push됩니다[6].

push.default 설정 변경하기

git config --global push.default current

이 설정은 로컬 브랜치 이름과 일치하는 원격 브랜치로 push하도록 합니다[20].

첫 Push시 업스트림 설정하기

처음 원격 저장소에 push할 때 -u 옵션을 사용하면 이후 push는 간단해집니다.

git push -u origin 원격브랜치명

이 명령어는 현재 로컬 브랜치를 원격 브랜치와 연결하고 push합니다. 이후부터는 간단히 git push만 실행하면 됩니다[19].

branch.autoSetupMerge 설정하기

새 브랜치를 만들 때 자동으로 추적 관계를 설정하도록 구성할 수 있습니다.

git config --global branch.autoSetupMerge always

이 설정을 활성화하면 git checkout -b 또는 git switch -c로 새 브랜치를 만들 때 자동으로 추적 관계가 설정됩니다[20].

결론

선택은 branch 이름을 통일할지, 서로 다른 이름을 명시적으로 추적할지와 팀의 push 정책에 따라 달라집니다. 적용 전 현재 upstream과 target ref를 확인합니다:

  1. 브랜치 이름을 일치시키거나
  2. 업스트림 브랜치를 명시적으로 설정하거나
  3. Git 2.37 이상을 사용 중이라면 push.autoSetupRemote true 설정을 활성화하는 것입니다