ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] 삭제된 remote branch를 따라 로컬 브랜치 삭제하기
    ETC 2022. 2. 2. 19:30
    반응형

    개요

    이 문서는 merge/delete 된 원격 브랜치를 추적하여 로컬 브랜치 역시 제거하는 것에 대해 다룬다. 준비 사항은 다음과 같다.

    • git
    • github repository
    • 로컬에 git clone

    다음은 현재 내 Github Repository의 브랜치 상황이다. 

    현재는 두 개의 브랜치가 존재하고 있다.

    • master
    • kubernetes-in-action

    하지만 내 로컬 브랜치의 상황은 다음과 같다

    $ git branch -al
      ch02
      ch03
      ch04
      ch05
      ch06
      ch07
      ch08
      ch09
      ch10
      ch11
      ch12
      ch13
      * kubernetes-in-action
      master
      remotes/origin/HEAD -> origin/master
      remotes/origin/kubernetes-in-action
      remotes/origin/master

    현재 로컬 브랜치 ch02 ~ ch13는 리모트 브랜치는 삭제되었고, 로컬에만 남아있는 상황이다. 이런 상황은 현업에서도 왕왕 있다. 이런 상황을 해결하는 방법은 크게 2가지가 있다.

    1. 터미널 명령어를 통해 원격 브랜치가 없는 로컬 브랜치 제거
    2. 레포지토리 삭제 후 다시 클론

    이 문서에서는 첫 번째 방법으로 해결해보자.

     

    만약 리모트는 삭제했는데 로컬은 리모트를 따르고 있다면 추후 절 "만약 원격 브랜치는 삭제되었는데 로컬 브랜치에서 원격 브랜치를 아직 따르고 있다면?"를 참고하라.

    터미널 명령어를 통해 원격 브랜치가 없는 로컬 브랜치 제거

    개요부터 문제 상황까지 장황하게 써놨지만, 실제 해결 방법은 간단하다. 터미널에 다음을 입력하면 된다.

    $ git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d
    ch02 브랜치 삭제 (과거 cd0f68e).
    ch03 브랜치 삭제 (과거 32b5dc8).
    ch04 브랜치 삭제 (과거 1388794).
    ch05 브랜치 삭제 (과거 54fdd6c).
    ch06 브랜치 삭제 (과거 0cc8102).
    ch07 브랜치 삭제 (과거 fae93fe).
    ch08 브랜치 삭제 (과거 75717e6).
    ch09 브랜치 삭제 (과거 dae41e4).
    ch10 브랜치 삭제 (과거 692e67d).
    ch11 브랜치 삭제 (과거 a819a53).
    ch12 브랜치 삭제 (과거 24a99d6).
    ch13 브랜치 삭제 (과거 524a763).

    awk egrep등의 터미널 명령어에 대해서 잘 아는 사람은 무슨 명령어인지 알 것이다. 이를 간단하게 설명하면 원격 브랜치가 삭제된 로컬 브랜치를 찾아서 삭제하는 명령어이다. 

    만약 원격 브랜치는 삭제되었는데 로컬 브랜치에서 원격 브랜치를 아직 따르고 있다면?

    만약 원격 브랜치가 삭제되었지만 로컬 브랜치에서 원격 브랜치를 따르고 있다면 다음 명령어로 연결을 해제할 수 있다.

    $ git fetch -p
    https://github.com/gurumee92/today-i-learned URL에서
     - [삭제됨]          (없음)   -> origin/ch02
     - [삭제됨]          (없음)   -> origin/ch03
     - [삭제됨]          (없음)   -> origin/ch04
     - [삭제됨]          (없음)   -> origin/ch05
     - [삭제됨]          (없음)   -> origin/ch06
     - [삭제됨]          (없음)   -> origin/ch07
     - [삭제됨]          (없음)   -> origin/ch08
     - [삭제됨]          (없음)   -> origin/ch09
     - [삭제됨]          (없음)   -> origin/ch10
     - [삭제됨]          (없음)   -> origin/ch11
     - [삭제됨]          (없음)   -> origin/ch12
     - [삭제됨]          (없음)   -> origin/ch13
Designed by Tistory.