1. 브랜치를 로컬과 리모트에서 같이 삭제 (번역 요약)
[http://stackoverflow.com/a/23961231/1150133 -- github - Delete a Git branch both locally and remotely - Stack Overflow] 질문글에 달린 [답변글]이 좋아서 요약 번역함. 그림 출처도 저 글.
질문
어떤 브랜치를 로컬 저장소와 리모트 저장소 양쪽에서 다 지우고 싶다. (그런데 git pull
할 때마다 되살아난다)
짧은 답변
리모트 저장소의 브랜치를 지우려면:
git push origin --delete <branch> # Git 버전 1.7.0 또는 그 이후
git push origin :<branch> # Git 버전 1.7.0 이전
로컬 저장소의 브랜치를 지우려면:
git branch --delete <branch>
git branch -d <branch> # --delete 대신 짧게
git branch -D <branch> # 머지되지 않은 브랜치를 강제로 지울 때
리모트 트래킹 브랜치(remote-tracking branch)를 지우려면:
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # 짧게
git fetch <remote> --prune # 유효하지 않은 트래킹 브랜치를 전부 삭제
git fetch <remote> -p # 짧게
긴 답변 : 지워야 될 브랜치는 세 가지이다
브랜치를 로컬과 리모트에서 다 지울 때 연관되는 브랜치는 (두 가지가 아니라) 세 가지이다.
- 로컬 브랜치
X
- 리모트 origin 저장소에 있는 브랜치
X
- 리모트 브랜치
X
를 추적하고 있는 로컬 리모트-트래킹 브랜치 origin/X
질문자가 시도했던 방법
git branch -rd origin/bugfix
이것은 리모트-트래킹 브랜치인 origin/bugfix
만 삭제할 뿐,
origin
저장소에 있는 실제 리모트 브랜치 bugfix
를 삭제하지는 않는다.
실제 리모트 브랜치를 삭제하려면 다음과 같이 해야 한다
git push origin --delete bugfix
보충 설명
리모트 브랜치나 리모트-트래킹 브랜치를 삭제할 때 고려해야 할 점
리모트 브랜치를 삭제하기 위해 push를 쓰면 리모트-트래킹 브랜치도 같이 삭제된다
git push
를 사용하여 리모트 브랜치 X
를 삭제할 경우 로컬에 있는 리모트-트래킹 브랜치 origin/X
도 삭제되므로, 따로 git fetch --prune
을 수행할 필요는 없다.
정말로 트래킹 브랜치가 같이 삭제되었는지는 다음과 같은 코드를 써서 알 수 있다.
# 리모트-트래킹 브랜치 목록만 보기
git branch --remotes
git branch -r
# 로컬 브랜치와 리모트-트래킹 브랜치 목록 보기
git branch --all
git branch -a
prune으로 유효하지 않은 리모트-트래킹 브랜치 일괄 삭제하기
리모트 브랜치 X
를 커맨드 라인에서 삭제한 게 아니라 GitHub의 웹 인터페이스를 쓰는 등 원격에서 직접 삭제했다면, 로컬 저장소에는 아직 리모트-트래킹 브랜치 origin/X
가 남아 있으며 이 브랜치는 의미없는 브랜치이다.
이런 유효하지 않은 리모트-트래킹 브랜치를 삭제할 때는 git fetch
에 --prune
또는 -p
옵션을 주어 실행한다. 이 명령을 쓰면 유효하지 않은 리모트-트래킹 브랜치들은 전부 삭제되는 것에 유의
git fetch origin --prune
git fetch origin -p # 짧게
유효하지 않은 리모트-트래킹 브랜치를 수동으로 삭제하는 다른 방법
git branch --delete
에 --remote
또는 -r
옵션을 주어서 원하는 리모트-트래킹 브랜치들만 삭제할 수 있다. 이 경우는 네트워크 연결도 필요없다.
git branch --delete --remotes origin/X
git branch -dr origin/X # 짧게
참고
2. Comments
컴퓨터분류