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)와 마찬가지로 인터페이스 (분기 페이지)를 통해 원격 지점을 직접 삭제할 수있었습니다.
그러나 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
'Programing' 카테고리의 다른 글
배열에서 고유하지 않은 모든 값 (예 : 중복 / 둘 이상의 발생)을 가져옵니다. (0) | 2020.02.25 |
---|---|
Math.Round (2.5)가 3 대신 2를 반환하는 이유는 무엇입니까? (0) | 2020.02.25 |
배열의 마지막 요소를 삭제하지 않고 얻는 가장 좋은 방법은 무엇입니까? (0) | 2020.02.25 |
폴더에있는 모든 파일의 파일 이름 가져 오기 (0) | 2020.02.25 |
통합 관리 파이프 라인 모드에 적용되지 않는 ASP.NET 설정이 감지되었습니다. (0) | 2020.02.25 |