[Git] 원격 브랜치에서 삭제된 브랜치들을 로컬에서도 삭제하기

Seungrok Yoon (Lethe)·2023년 8월 14일
1

[FE] 프로젝트 세팅

목록 보기
4/6

git remote prune origin 명령어는 로컬 브랜치를 덩달아 삭제해주지 않는다. 그래서 날을 잡아 일일이 리모트에 없는 로컬 브랜치들을 삭제했었다.

매우 불편했다.

그래서 방법을 찾아보았다.

리모트에서 삭제된 브랜치들을 로컬 브랜치들을 삭제하는 명령어

리눅스 파이프 연산자와 grep 문법, xargs 문법을 활용하면 이 작업을 한 번에 수행할 수 있다.

git remote prune origin && git branch -vv | grep ': gone]'| awk '{print $1}' | xargs git branch -D

각 명령어에 대한 간단한 설명이다

git remote prune origin - 리모트 브랜치를 업데이트
&& 이전명령어가 성공했을 때, 다음 명령어를 순차로 실행,복수개의 깃 명령을 연결할 수 있다. (명령어들이 독립적으로 실행됨)
| 파이프 연산자 - 이전 명령어 실행의 결과를 가지고 이후 명령어를 적용시킴

git branch -vv - 브랜치
grep 문자열 - 문자열에 매칭되는 결과를 출력
grep -v 문자열 - 문자열에 매칭되는 결과는 제외한 결과들을 출력
xargs 명령어 - 앞선 출력결과들에 명령어를 각자 적용함 (Array.map 같은 역할)

git branch -D - 브랜치를 삭제

awk

awk는 기본적으로 입력 데이터를 라인(line) 단위의 레코드(Record)로 인식합니다. 그리고 각 레코드에 들어 있는 텍스트는 공백 문자(space, tab)로 구분된 필드(Field)들로 분류되는데요. 이렇게 식별된 레코드 및 필드의 값들은 awk 프로그램에 의해 패턴 매칭 및 다양한 액션의 파라미터로 사용됩니다. (참고로, 레코드 구분 문자(newline)와 필드 구분 문자(space, tab)는 awk 프로그램 옵션으로 변경할 수 있습니다.) - 출처: https://recipes4dev.tistory.com/171

awk명령어에서 ${0}이 레코드 전체, ${n}은 n 번째 필드이다. 각 필드는 공백으로 구분되어 있다.

feat/#1-signin-signup 7af528a [origin/feat/#1-signin-signup] feat: 로그인/회원가입 - Assignment 1 - validate Email and Password (#3)

위 레코드에서 ${1}필드에 해당하는 값은 "feat/#1-signin-signup", 즉 브랜치 이름이다. 입력 데이터들을 ${1}만 포함시켜서 출력하게 되겠다.

package.json에 명령어 추가하기

srcipts 객체에

prune_local : "echo git remote prune origin && git branch -vv | grep ': gone]'| awk '{print $1}' | xargs git branch -D"

키:값 쌍을 추가해주자.

Reference

awk 명령어 - https://recipes4dev.tistory.com/171
&& 연산자 - https://opentutorials.org/module/2538/15818

https://stackoverflow.com/questions/7726949/remove-tracking-branches-no-longer-on-remote

profile
안녕하세요 개발자 윤승록입니다. 내 성장을 가시적으로 기록하기 위해 블로그를 운영중입니다.

1개의 댓글

comment-user-thumbnail
2023년 8월 15일

잘 정리된 포스팅 잘 보고 갑니다🍀

답글 달기