programing

Git에서 원격으로 분기 이름 바꾸기

abcjava 2023. 5. 16. 22:04
반응형

Git에서 원격으로 분기 이름 바꾸기

내게만 있는 리포지토리가 있는 경우git:// 보통 push 수 있습니다. 제가 로 push+pull을 할 수 ? 로컬에서 수행하는 것과 같은 방식으로 저장소의 분기 이름을 변경할 수 있습니까?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)를 작성했습니다.

배시 함수로서:

git-rename-remote-branch() {
  if [ $# -ne 3 ]; then
    echo "Rationale : Rename a branch on the server without checking it out."
    echo "Usage     : ${FUNCNAME[0]} <remote> <old name> <new name>"
    echo "Example   : ${FUNCNAME[0]} origin master release"
    return 1 
  fi

  git push $1 $1/$2\:refs/heads/$3 :$2
}

@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

물론입니다. 지점 이름을 로컬로 변경하고 새 지점을 누른 다음 이전 지점 삭제를 누르면 됩니다.

유일한 실제 문제는 저장소의 다른 사용자가 로컬 추적 분기의 이름을 바꾸지 않는다는 것입니다.

지점 이름을 변경하려면 다음 단계를 수행합니다.

  1. git branch -mold_branchname new_branchname
  2. git push origin : old_businessname new_businessname
  3. git push --set-push origin new_sysname

그 후에 기원을 가져옵니다.

  1. git fetch origin
  2. git 원격 가지치기 기원

TL;DR

원격 분기의 "이름 바꾸기"는 실제로 2단계 프로세스입니다(반드시 순서를 지정할 필요는 없음).

  • 분기 (이전 원분삭제기격삭(제▁of▁deletion이)git push [space]:<old_name>ksrb 설명);
  • 새 원격 분기로 밀어넣습니다(아래 두 개의 응답 명령 간의 차이).

삭제 중

TorothyGit을 사용하는데 명령줄을 통해 분기를 삭제하려고 했을 때 다음과 같은 메시지가 표시되었습니다.

$ git push origin :in
  • fatal: 'fatal'이 깃 저장소가 아닌 것 같습니다.

  • 치명적: 원격 리포지토리에서 읽을 수 없습니다.

올바른 액세스 권한이 있고 리포지토리가 있는지 확인하십시오.

이것은 TorothyGit가 자동으로 불러오는 개인 키가 로드되지 않은 대회 때문일 가능성이 높습니다.또한 ToroiseGit 명령어에는 다음과 같은 기능이 없습니다.origin (리예:핀▁in▁ref▁them)git.exe push --progress "my_project" interesting_local:interesting).

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

분기 비트 버킷 삭제

그러나 TorusGit에서는 Browse References를 통해 원격 분기를 삭제할 수도 있습니다.

참조 찾아보기 메뉴

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

TorothyGit 원격 분기 삭제

밀어내기

이전 원격 분기를 삭제한 후 Push 창의 Remote: 필드에 새 이름을 입력하기만 하면 TorothyGit을 통해 새 원격 분기에 직접 밀어 넣었고 이 분기는 자동으로 생성되어 Bitbucket에 표시됩니다.

수동으로 이되지 않은 은 그나여전수수로는것하을선경호우이는다스같다니아않습요음과점은입니다.-u=--set-upstream.

문서에서,-u는 의별뿐입다니일의 입니다.--set-upstream따라서 -set-upstream new-branchSilvain()과 Shashank()-u origin new_branch의 응답에 있는 명령은 동일합니다. 원격 참조가 이전에 정의된 다른 참조가 없는 경우로 기본 설정되기 때문입니다.

  • 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

깃허브를 사용하고 있다면,

github.com 의 UI를 사용하여 이전 이름 분기를 기반으로 새 분기를 생성할 수 있습니다.

분기 이름 변경

이미 제공된 답변에 추가하여 새 분기가 이미 존재하는지 여부를 먼저 확인하는 버전이 있습니다(스크립트에서 안전하게 사용할 수 있도록).

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

반응형