[git] Git을 사용하여 하나의 명령으로 여러 분기를 삭제할 수 있습니까?

예를 들면 : 나는 세 가지의 톤이 내 로컬 저장소, 청소하고 싶습니다 3.2, 3.2.1, 3.2.2, 등

나는 한 번에 많은 것을 제거하기 위해 비열한 방법을 원했습니다. 그들은 대부분 도트 릴리스 규칙을 따르기 때문에 어쩌면 말할 지름길이 있다고 생각했습니다.

git branch -D 3.2.*

3.2.x 가지를 모두 죽입니다.

나는 그 명령을 시도했지만 물론 작동하지 않았습니다.



답변

해당 구문이 아닙니다. 그러나 다음과 같이 할 수 있습니다.

git branch -D 3.2 3.2.1 3.2.2

기본적으로 자식 분기는 단일 호출로 여러 분기를 삭제합니다. 불행히도 지점 이름 완성을하지 않습니다. bash에서는 다음을 수행 할 수 있습니다.

git branch -D `git branch | grep -E '^3\.2\..*'`


답변

최악의 경우 다음을 사용할 수 있습니다.

git branch | grep '3\.2' | xargs git branch -d


답변

git branch  | cut -c3- | egrep "^3.2" | xargs git branch -D
  ^                ^                ^         ^
  |                |                |         |--- create arguments
  |                |                |              from standard input
  |                |                |
  |                |                |---your regexp
  |                |
  |                |--- skip asterisk
  |--- list all
       local
       branches

편집하다:

자식 브랜치 출력은 스크립팅에 사용되지 않기 때문에 더 안전한 버전 (Jakub Narębski 및 Jefromi에서 제안) :

git for-each-ref --format="%(refname:short)" refs/heads/3.2\* | xargs git branch -D

… 또는 xargs-free :

git branch -D `git for-each-ref --format="%(refname:short)" refs/heads/3.2\*`


답변

git branch –list를 사용하여 적합한 분기를 나열하고 git branch -D / -d를 사용하여 적합한 분기를 제거 할 수 있습니다.

한 라이너 예 :

git branch -d `git branch --list '3.2.*'`


답변

최근에, 나는 같은 문제의 해결책을 찾고 있었고 마침내 나는 하나의 대답을 찾았으며 매우 잘 작동하고 있습니다.

  1. 터미널 또는 이와 동등한 것을 엽니 다.
  2. 자식 분기에 입력 | 삭제 될 분기의 미리보기를 위해 grep “pattern”.
  3. 자식 분기에 입력 | grep “패턴”| xargs 자식 분기 -D

이 솔루션은 훌륭하며 각 명령에 대한 자세한 설명과 작동 방법을 보려면 여기에 나와 있습니다 .


답변

사용하다

git for-each-ref --format='%(refname:short)' 'refs/heads/3.2.*' |
   xargs git branch -D


답변

아마도 당신은 이것을 유용하게 사용할 수있을 것입니다 :

예를 들어 ‘master’, ‘foo’및 ‘bar’가 아닌 모든 분기를 제거하려면

git branch -D `git branch | grep -vE 'master|foo|bar'`

grep -v ‘something’은 반전 된 matcher입니다.