GitHub에서 제거 된 브랜치를 체크 아웃해야하는 이유는 무엇입니까?


26

GitHub 리포지토리에서 동료가라는 지점을 제거했습니다 release. 그러나 git checkout release로컬에서 실행할 때 항상 제거 된 분기를 얻습니다 release. 같은, 내가 다른 지점을 체크 아웃 한 경우에도 삭제 된 release분기를 git branch -D release다시 달렸다 git checkout release.

GitHub 리포지토리에서 수정해야 할 것이 있습니까, 아니면 로컬로 수정해야합니까?


1
git branch --remote실행 후 출력 은 무엇입니까 git fetch? git fetch -p삭제 된 원격 분기를 잊어 버리 려면 정리해야합니다 .
Stephen Kitt

2
해당 브랜치가 GitHub로 푸시되고 그 이후에 가져온 경우 브랜치 사본도 있습니다. 얕은 복제본이나 무언가를 사용하지 않는 한 모든 자식 저장소는 자체적으로 완전합니다.
muru

@StephenKitt : 감사합니다. git branch --remote출력 origin/release. git fetch -p추가 인수없이 실행한다는 의미 입니까? 삭제 된 모든 원격 분기를 제거합니까?
Tim

1
예, git fetch -p추가 인수를 모두 삭제 된 원격 가지를 가지 치기 할 것이다.
Stephen Kitt

1
분산 버전 제어의 세계에 오신 것을 환영합니다!
chrylis

답변:


24

원격 측에서 분기를 삭제 한 후에도 이전에 가져온 원격 분기를 로컬에서 계속 볼 수 있습니다.

$ git branch -a
[...]
release
remotes/origin/release
[...]

"릴리즈"만 제거했지만 "원격 / 원산지 / 릴리스"는 제거하지 않았습니다. 다음과 같이 삭제하십시오.

$ git branch -rd origin/release

또는 더 이상 원격 측에 존재하지 않는 가져온 분기를 모두 제거하십시오 .

$ git remote prune origin 

감사. 에서은 git branch -rd origin/release, 무엇합니까 -r의미? ? -d와 같은 의미 -D입니까? ? git branch -rd origin/release로 교체 가능 git branch -d remotes/origin/release
Tim

@Tim : 매뉴얼에서; -r : List or delete (if used with -d) the remote-tracking branches.; -D :Shortcut for --delete --force.
루퍼

감사. ? git branch -rd origin/release로 교체 가능 git branch -d remotes/origin/release
Tim

@Tim no -r원격 지점을 나타냅니다 . 필요합니다. 로컬 및 원격 지사는 다른 디렉토리에 저장 비교된다 ls -l .git/refs/heads하고 ls -l .git/refs/remotes. 또한 가질 수 지역 지점 이라고 remotes/origin/release없이 삭제 될 것입니다 -r. 혼란스럽게 들릴지 모르지만, 그냥 놀면서 이상한 이름으로 가지를 만들고 어떻게 보이는지 살펴볼 수 있습니다 .git/.
rudimeier

15

지점이 원격으로 삭제되면 로컬 저장소를 제거해야합니다.이를 수행하는 가장 쉬운 방법은

git fetch -p

원격 저장소에 대한 모든 변경 사항으로 로컬 저장소가 업데이트되지만 로컬 분기는 업데이트되지 않습니다. 이것을 실행 한 후

git branch --remote

더 이상 삭제 된 원격 지점을 표시하지 않습니다.

git 리포지토리는 자체 시스템 또는 서버에서 완료됩니다. 따라서 리포지토리를 처음 복제하면 전체 복사본이 생성되고 로컬 자식은 로컬 지점뿐만 아니라 모든 원격 지점에 대해 "인식"합니다. 이 정보는 자동으로 동기화되지 않으므로 동료 release가 서버 에서 분기를 삭제 해도 로컬 자식 저장소는 원격 release분기에 대한 개념을 잃지 않았습니다 . 동기화하면 git fetch원격 분기의 모든 로컬 정보 가 업데이트되므로 서버의 상태 (엄격하게 말하면 원격 저장소)가 일치하지만 원격 분기의 로컬 정보는 삭제되지 않습니다. git fetch -p(또는 git fetch --prune, 또는 git remote prune)로 정리 하면 삭제 된 원격 분기의 로컬 정보가 제거됩니다.


감사. "원격 저장소에 대한 모든 변경 사항으로 로컬 저장소를 업데이트하지만 로컬 분기는 업데이트하지 않습니다." 로컬 브랜치가 업데이트되지 않았다면 어떤 업데이트입니까?
Tim

모든 원격 업데이트입니다. 로컬 git 리포지토리는 로컬 브랜치와 원격 브랜치를 구별하지만 원격 브랜치는 서버와 마술로 동기화되지 않으며 로컬 git 저장소에 저장된 것과 같이 로컬에도 존재합니다. 가져 오기는 로컬 저장소를 원격 저장소와 동기화하고 원격 분기의 상태를 업데이트합니다. 기본적으로 삭제 된 원격 브랜치는 원격 브랜치의 로컬 정보에서 제거되지 않으며 -p( --prune) 강제로 수행합니다.
Stephen Kitt

감사. 왜 삭제하지 않았다 release으로 지점을 git branch -D release하기 전에 git checkout release메이크업의 git checkout release점점 정지 release지점을?
Tim

1
때문에 git checkout release그 이름을 가진 원격 지점이있는 경우 자동으로 지점을 다시 만듭니다.
Stephen Kitt

"원격 지점"이란 로컬 저장소 또는 Github 저장소의 지점을 의미합니까? 전자의 경우 git branch -D release이미 release로컬 리포지토리에서 분기를 삭제했습니다 . 후자의 경우 동료가 releaseGitHub 에서 지점을 삭제했습니다 . 그래도 왜 "그 이름의 원격 브랜치가있는 경우 자동으로 브랜치를 다시 만들 것"인지 잘 모르겠습니다.
Tim

3

Tim : Git은 VCS로 배포되므로 원격에서 로컬로 리포지토리를 복제하면 모든 항목 (이력)을 복제합니다. 리포지토리를 복제 할 때 release라는 브랜치가있었습니다. 동료가 릴리스 분기를 원격으로 git fetch -p삭제 했으므로 해당 분기를 제거 하거나 삭제할 때까지 로컬에 해당 분기가 있습니다.


3
이 답변은 이미 존재하는 답변과 어떻게 다릅니 까?
Stephen Rauch

1

약간의 접선이지만이 사이트의 관점은 브랜치를 삭제하는 일반적인 주제를 이해하는 데 도움이 될 수 있습니다.

http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/

여기에서 이미 논의한 내용과 중복되는 부분이 있지만 협업 환경에서 더 이상 필요하지 않은 원격 및 로컬 분기 삭제와 같은 하우스 키핑에 중점을 둡니다. 특히이 git branch --merged명령은 메인 라인 (또는 관심있는 지점)에 병합되어 삭제하기에 안전한 지점을 식별합니다. 공동 작업하는 경우 이와 같은 더 멋진 미니 스크립트는 날짜 및 작성자와 함께 소화하기 쉬운 형식으로 표시합니다.

for branch in `comm -12  <(git branch --merged|awk '{print($1)}') <(git branch -r --merged|awk '{print($1)}'|awk -F \/ '{print($2)}')`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1` \\t$branch; done | sort -r

(불행히도 "좋은, 소화하기 쉬운"은 스크립트 자체의 형식에는 적용되지 않습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.