Programing

Git에서 원격으로 브랜치 이름 바꾸기

lottogame 2020. 2. 25. 22:01
반응형

Git에서 원격으로 브랜치 이름 바꾸기


내가 git://액세스 할 수 있는 저장소 (일반적으로 푸시 + 풀)가있는 경우 로컬에서 수행하는 것과 같은 방식으로 해당 저장소의 분기 이름을 바꾸는 방법이 git branch -m있습니까?


원하는 이름으로 새 로컬 브랜치를 만들고 원격으로 푸시 한 다음 이전 원격 브랜치를 삭제하면됩니다.

$ git branch new-branch-name origin/old-branch-name
$ git push origin --set-upstream new-branch-name
$ git push origin :old-branch-name

그런 다음 이전 분기 이름을 보려면 저장소의 각 클라이언트가 수행해야합니다.

$ git fetch origin
$ git remote prune origin

참고 : 이전 지점이 기본 지점 인 경우 기본 지점 설정을 변경해야합니다. 그렇지 않으면을 실행할 때 "현재 분기 삭제가 금지되었습니다"라는$ git push origin :old-branch-name 오류가 발생 합니다.


로컬 분기의 이름을 바꾸지 않고 원격으로 분기의 이름을 바꾸려면 단일 명령 으로이 작업을 수행 할 수 있습니다.

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

위의 작업을 쉽게 수행 할 수있는 편리한 바로 가기를 제공하는 이 스크립트 ( git-rename-remote-branch )를 작성했습니다.

@ksrb의 주석을 통합하려면 : 이것이 기본적으로하는 일은 단일 명령에서 두 번의 푸시입니다. 먼저 git push <remote> <remote>/<old_name>:refs/heads/<new_name>이전 원격 추적 분기를 기반으로 새 원격 분기를 푸시 한 다음 git push <remote> :<old_name>이전 원격 분기를 삭제합니다.


먼저 이름을 바꾸려는 지점으로 체크 아웃하십시오.

git branch -m old_branch new_branch
git push -u origin new_branch

이전 분기를에서 제거하려면 remote:

git push origin :old_branch

확실한. 지점의 이름을 로컬로 바꾸고 새 지점을 누른 다음 이전 항목을 삭제하십시오.

유일한 실제 문제는 리포지토리의 다른 사용자가 이름을 바꾸는 로컬 추적 분기가 없다는 것입니다.


TL; DR

원격 브랜치의 "이름 바꾸기"는 실제로 2 단계 프로세스입니다 (주문하지 않아도 됨)

  • 이전 리모트 브랜치 (결실 git push [space]:<old_name>ksrb 설명 );
  • 새로운 원격 지사로 들어갑니다 (아래의 몇 가지 답변 명령의 차이점).

삭제

TortoiseGit을 사용 하고 명령 줄을 통해 지점을 처음 삭제하려고 할 때 다음과 같은 결과가 나타납니다.

$ git push origin :in
  • 치명적 : 'origin'은 자식 저장소가 아닙니다.

  • 치명적 : 원격 저장소에서 읽을 수 없습니다.

올바른 액세스 권한이 있고 저장소가 존재하는지 확인하십시오.

이것은 pageant개인 키가 로드 되지 않았기 때문일 수 있습니다 ( TortoiseGit이 자동으로 pageant 로로드 됨 ). 또한 TortoiseGit 명령에는 origin참조 가 없습니다 (예 :) git.exe push --progress "my_project" interesting_local:interesting.

또한 Bitbucket 을 사용 하고 있으며 다른 웹 기반 온라인 git 관리자 (GitHub, GitLab)와 마찬가지로 인터페이스 (분기 페이지)를 통해 원격 지점을 직접 삭제할 수있었습니다.

지사 Bitbucket 삭제

그러나 TortoiseGit 에서는 찾아보기 참조를 통해 원격 브랜치를 삭제할 수도 있습니다 .

참조 찾아보기 메뉴

원격 지점 (원격 목록)을 마우스 오른쪽 버튼으로 클릭하면 원격 지점 삭제 옵션이 표시됩니다.

TortoiseGit 원격 지점 삭제

미는

이전 원격 지점을 삭제 한 후 푸시 창의 원격 : 필드에 새 이름을 입력하기 만하면 TortoiseGit를 통해 새 원격 지점으로 직접 푸시 했으며이 지점은 Bitbucket 에서 자동으로 생성되어 표시됩니다 .

그러나 여전히 수동으로 수행하는 것을 선호하는 경우이 스레드에서 아직 언급되지 않은 점은 -u= --set-upstream입니다.

에서 git push문서 , -u단지 별칭 --set-upstream의 답변에서 이렇게 명령 실뱅 ( -set-upstream new-branch)Shashank ( -u origin new_branch) , 동등한 원격 심판 이후 기본값으로origin 다른 심판 이전에 정의되지 않은 경우 :

  • git push origin -u new_branch= git push -u new_branch로부터 문서 정보 :

    구성이 없으면 기본값은 origin입니다.

결국, 나는 여기에 다른 답변에서 제안한 명령을 수동으로 입력하거나 사용하지 않았으므로 비슷한 상황에서 다른 사람들에게 유용 할 수 있습니다.


@Sylvain Defresne의 대답이 왜 효과가 없는지 모르겠습니다.

git branch new-branch-name origin/old-branch-name
git push origin --set-upstream new-branch-name
git push origin :old-branch-name

업스트림을 설정 해제 한 다음 스트림을 다시 설정할 수 있습니다. 다음은 내가 한 일입니다.

git checkout -b new-branch-name
git branch --unset-upstream
git push origin new-branch-name -u
git branch origin :old-branch-name

이것이 옳고 그른지 모르겠지만 지점의 "이전 이름"을 지점의 "새 이름"으로 밀고 다음 두 줄로 이전 지점을 완전히 삭제했습니다.

git push origin old_branch:new_branch
git push origin :old_branch

기존 지점을 기반으로 새 분기를 만들 수 있습니다. 이처럼 오래된 지점을 삭제하십시오.여기에 이미지 설명을 입력하십시오


이미 주어진 답변에 추가하여 새 분기가 이미 존재하는지 먼저 확인하는 버전이 있습니다 (스크립트에서 안전하게 사용할 수 있음)

if git ls-remote --heads "$remote" \
    | cut -f2 \
    | sed 's:refs/heads/::' \
    | grep -q ^"$newname"$; then
    echo "Error: $newname already exists"
    exit 1
fi
git push "$oldname" "$remote/$oldname:refs/heads/$newname" ":$oldname"

(확인은 이 답변 에서 온 것입니다 )

참고 URL : https://stackoverflow.com/questions/4753888/renaming-branches-remotely-in-git



반응형