코딩해보니/Git

[Git_51] 원격 브랜치 삭제 및 삭제시 동기화 문제

위시랜 2023. 5. 9. 12:07

원격 브랜치 삭제 및 삭제시 동기화 문제
원격 브랜치 삭제 및 삭제시 동기화 문제

원격 브랜치 삭제

로컬에서 원격 저장소의 브랜치를 삭제할 수 있습니다.

항상 그렇듯이 삭제는 신중하게 판단해야 합니다.
혹, 여러 사람이 함께 사용중인 브랜치라면 삭제해서는 안될 수 있습니다.

원격 브랜치를 삭제하는 방법은 push 명령어와 -d 옵션 또는 --delete 옵션을 함께 사용합니다.
사용법은 다음과 같습니다.

# 원격 브랜치 삭제
$ git push <원격 저장소 이름> -d(또는 --delete) <원격 저장소 브랜치>

예를 들어, 우리는 <원격 저장소 이름>을 origin이라고 설정했으며,

원격 저장소의 bugfix2 브랜치를 삭제하려면 $ git push origin --delete bugfix2 라고 실행합니다.


실제 실행 화면은 다음과 같습니다.

bugfix2 원격 브랜치 삭제
bugfix2 원격 브랜치 삭제

GitHub에서 확인 결과 삭제된 것을 볼 수 있습니다.

GitHub에서 삭제된 브랜치 확인
GitHub에서 삭제된 브랜치 확인


원격 브랜치 삭제 시 동기화 문제

서버(원격) 저장소에서 브랜치를 생성합니다.

GitHub에서 임의로 test라는 브랜치를 만들어 보겠습니다.

GitHub의 저장소 페이지에서 다음과 같이 ① → ② → ③ 의 순서로 진행해 test라는 브랜치를 만들었습니다.

GitHub에서 임의의 test라는 이름의 브랜치 생성
GitHub에서 임의의 test라는 이름의 브랜치 생성

그런 다음, 생성한 원격 브랜치 test의 정보를 로컬 저장소로 가져오겠습니다.

브랜치 정보를 가져올 때에는 git fetch 명령을 사용합니다.

# 원격 브랜치 정보 가져오기
$ git fetch

fetch 명령은 서버 저장소의 업데이트 된 내용을 Git으로 내려 받습니다.

파일의 변경 사항이 있다면, fetch 후 병합(merge)까지 진행해야 합니다.

하지만, 우리는 업데이트 된 브랜치 정보만 내려 받으므로 병합은 하지 않습니다.

 

GitHub에서 test라는 브랜치를 생성하고,

다음과 같이 로컬 저장소에서 git branch -r 을 통해 원격 브랜치 목록을 확인하더라도 test 원격 브랜치는 확인되지 않습니다.

원격 브랜치 목록 확인 및 브랜치 정보 내려 받기
원격 브랜치 목록 확인 및 브랜치 정보 내려 받기

이후 $ git fetch 를 통해 내려 받으면, [new branch] test 를 origin/test 로 내려 받음을 확인할 수 있습니다.

그리고 다시 $ git branch -r 로 원격 브랜치 목록을 확인하면 origin/test 가 확인됩니다.

 

현재 상태는 다음 그림과 같이 서버(원격) 저장소와 로컬 저장소의 브랜치 목록이 매칭되어 동기화 되어 있습니다.

서버(원격)저장소와 로컬 저장소와의 매칭 관계
서버(원격)저장소와 로컬 저장소와의 매칭 관계

여기서 GitHub에서 다음과 같이 다시 test 브랜치를 삭제해 보겠습니다.

원격 브랜치 삭제 후 로컬 저장소와의 매칭 관계
원격 브랜치 삭제 후 로컬 저장소와의 매칭 관계

삭제 결과, GitHub에서는 다시 master와 hotfix 브랜치만 존재합니다.

원격 브랜치 test 삭제 후 GitHub의 결과
원격 브랜치 test 삭제 후 GitHub의 결과

로컬 저장소의 원격 브랜치 목록을 확인해 봅니다.

원격 브랜치 목록 확인
원격 브랜치 목록 확인

orgin/test 가 그대로 남아 있음을 알 수 있습니다.

 

$ git fetch 를 실행 후 다시 원격 브랜치 목록을 확인합니다.

원격 브랜치 fetch 후 브랜치 목록 확인
원격 브랜치 fetch 후 브랜치 목록 확인

위 화면과 같이 fetch를 실행 후 아무런 메시지도 나오지 않으며,

원격 브랜치 목록을 확인했으나 그대로 origin/test 라는 원격 브랜치가 남아 있습니다.

 

앞서 배운 대로 push 명령어와 -d 옵션을 사용해 삭제해 보겠습니다.

다음과 같이 원격 브랜치의 경로를 찾을 수 없어 삭제할 수 없다는 메시지와 함께 에러가 발생합니다.

원격 브랜치 test 삭제 요청 후 에러 메시지
원격 브랜치 test 삭제 요청 후 에러 메시지

이렇게 서버(원격) 저장소의 브랜치와 로컬 저장소의 브랜치 정보가 일치하지 않아 발생한 문제로 이럴 경우 fetch를 받을 때 -p 옵션과 함께 받아야 합니다.

# 트래킹 브랜치가 더 이상 
# 원격 저장소에 있지 않을 경우
# 브랜치 정보 가져오기
$ git fetch -p(또는 --prune) <원격 저장소 이름>

 

다음의 실행 화면과 같이 $ git fetch -p origin 명령을 통해 동기화 됨을 알 수 있습니다.

-p 옵션으로 fetch 실행 후 결과 확인
-p 옵션으로 fetch 실행 후 결과 확인

 

이상으로 원격 브랜치를 삭제하고 삭제시에 발생할 수 있는 오류 상황을 살펴봤습니다.

 

감사합니다.

 

 

[전자책]Basic Git - 예스24

SVN을 사용할 때도 그랬지만, 버전 관리 시스템을 사용하면서 충분히 알지 못한 상태에서 당장 필요한 기능만을 익혀서 사용하는 경우가 대부분이었습니다. 어떻게 동작하는 지에 대한 이해는

www.yes24.com

 

상기 배너는 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.