내가 git://
액세스 할 수 있는 저장소 (일반적으로 푸시 + 풀)가있는 경우 로컬에서 수행하는 것과 같은 방식으로 해당 저장소의 분기 이름을 바꾸는 방법이 git branch -m
있습니까?
내가 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 fetch origin --prune
(새 분기를 효과적으로 가져오고 더 이상 원격에서 참조를 제거함).
-d
또는 --delete
대신 사용할 수 있습니다 :
.
로컬 분기의 이름을 바꾸지 않고 원격으로 분기의 이름을 바꾸려면 단일 명령 으로이 작업을 수행 할 수 있습니다.
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>
위의 작업을 쉽게 수행 할 수있는 편리한 바로 가기를 제공하는 이 스크립트 ( git-rename-remote-branch )를 작성했습니다.
bash 함수로서 :
git-rename-remote-branch(){
if [ $# -ne 3 ]; then
echo "Rationale : Rename a branch on the server without checking it out."
echo "Usage : $(basename $0) <remote> <old name> <new name>"
echo "Example : $(basename $0) origin master release"
exit 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 push <remote>/<old_name>:refs/heads/<new_name>
수단은 SRC로 기존의 리모컨을 사용하는 새로운 리모컨을 누르면 다음 git push [space]:<old_name>
수단이 기존의 원격 삭제
refs/heads/name
합니까? name
직접 사용할 수 없어서 첫 번째 명령을 내릴 수 git push <remote> <remote>/<old_name>:<new_name>
있습니까?
<new_name>
가 아직 없기 때문에 아니요 . 지점이 존재하지 않으면 Git은 전체 이름을 사용해야합니다. 그렇지 않으면 <new_name>
태그 이름도 참조 할 수 있습니다.
refs/heads/<new_name>
이미 존재하는 것입니다. 삭제가 여전히 성공하여 <remote>/<old_name>
삭제 만됩니다. 사전에 점검을하면 쉽게 피할 수 있습니다.
먼저 이름을 바꾸려는 지점으로 체크 아웃하십시오.
git branch -m old_branch new_branch
git push -u origin new_branch
이전 분기를에서 제거하려면 remote
:
git push origin :old_branch
git push -u origin new_branch
:)으로 분기를 추적하도록 업스트림을 설정해야합니다. 그렇지 않으면 이름이 바뀐 분기 (new_branch)가 계속 원점 / old_branch를 추적합니다. 원격 old_branch를 삭제 한 후에도 new_branch는 분기가 없어도 여전히 origin / old_branch를 추적합니다.
확실한. 지점의 이름을 로컬로 바꾸고 새 지점을 누른 다음 이전 항목을 삭제하십시오.
유일한 실제 문제는 리포지토리의 다른 사용자가 이름을 바꾸는 로컬 추적 분기가 없다는 것입니다.
원격 브랜치 "이름 바꾸기"는 실제로 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)와 마찬가지로 인터페이스 (분기 페이지)를 통해 원격 지점을 직접 삭제할 수있었습니다.
그러나 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
입니다.
결국, 나는 여기에 다른 답변에서 제안한 명령을 수동으로 입력하거나 사용하지 않았으므로 비슷한 상황에서 다른 사람들에게 유용 할 수 있습니다.
origin
입니다. 명령을 실행할 때 리모컨 이름을 지정해야합니다 git remote
. Git은 ssh
공개 + 개인 키를 사용하고 있음을 의미합니다. Autoload Putty keys
TortoiseGit은 원격 참조로 무엇이든 할 수있는 필요한 키를 자동으로로드 한다고 가정합니다 . 마지막 git push -u
으로 원격 브랜치로 푸시하기위한 별칭이 아니며 로컬로 생성 된 원격 브랜치로 푸시하기위한 별칭이며 원격 참조는 아직이 브랜치가 아닙니다 .
-u
은 별명 --set-upstream
이며 "구성이 없으면 기본값은origin
"입니다. Sylvain 과 Shashank 은 새로 만든 원격 지점 으로이 기능을 사용합니다 . 키 문제에 기인되었을 수도 미인 대회 I 시도 할 때로드 가지고 있지 git push origin :in
쉘에. 그래서 나는 당신의 downvote를 이해하지 못합니다. 나는 다른 답변에서 내 주소와 주소가없는 세부 사항을 지적하고 설명하고 해결했습니다.
-u
는 별칭 --set-upstream
이지만 원격 브랜치로 푸시하는 별칭은 아닙니다. 원격 지점에 푸시하려면 고유하게 필요 git push <remote>
하며 아직 원격에 있지 않은 경우을 추가하십시오 git push -u <remote>
. 따라서 -u
원격에서 분기의 참조를 작성하는 데 사용됩니다.
@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
이미 주어진 답변에 추가하여 새 분기가 이미 존재하는지 먼저 확인하는 버전이 있습니다 (스크립트에서 안전하게 사용할 수 있음)
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"
git show-ref --quiet --verify -- refs/heads/$new_name
대신에 사용했을 것입니다 ls-remote | cut | sed | grep
.
git push origin origin/old_name:refs/heads/new_name && git push origin :old_name
입니다.