W skrócie;
- Jak mogę usunąć zdalne wiele połączonych pilotów?
Więcej informacji;
Mam repozytorium git z dziesiątkami pilotów, które zostały połączone w master. Mogę usuwać te piloty pojedynczo, używając:
git push --delete origin myBranch-1234
Jednak jest to powolny i żmudny proces dla wszystkich pilotów. Więc próbuję tego polecenia:
git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete
git branch -r --merged
wyświetla listę wszystkich połączonych pilotów.
grep origin
informuje polecenie, aby zawierało źródło.
grep -v master
informuje polecenie, aby wykluczyć wzorzec.
xargs git push origin --delete
informuje polecenie, aby usunąć listę pilotów.
Oczekuję, że wszystko razem zgromadzi wszystkie scalone piloty i je usunie.
Kiedy uruchamiam powyższe polecenie, otrzymuję następujące informacje dla każdego połączonego pilota;
error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc
Jednak te piloty istnieją i mogę sprawdzić każdy z nich. Wiele witryn i osób poleca mi bieganie w git fetch --prune
celu usunięcia brakujących odniesień. To nic nie robi, ponieważ wszystkie te piloty istnieją.
Więc proszę cię, droga giełdzie stosów;
- Dlaczego mogę usunąć jednego pilota, ale nie wielu?
- Czy moje polecenie jest poprawne?
Myślę, że brakuje mi czegoś małego. Za każdym razem, gdy to badam, wydaje się, że robię to poprawnie, ale otrzymuję powyższe błędy.
źródło
--prune
? Moim zdaniem to dość myląceorigin/
w nazwach oddziałów, zgodnie z opisem / rozwiązano w innych odpowiedziach.Czy te gałęzie są usunięte z odległego (pochodzenia)? Jeśli tak, możesz to po prostu zrobić
W przeciwnym razie mogą powrócić nawet po ich lokalnym usunięciu.
Aktualizacja: Patrząc ponownie na twoje polecenie, wygląda na to, że tworzysz je nieprawidłowo. Prawdopodobnie chcesz
ale zamiast tego robisz coś takiego
źródło
git branch -r --merged
a następnie próbuję je usunąć za pomocąxargs git push origin --delete
. Polecenie próbuje usunąć piloty, z wyjątkiem tego, że uważa, żeremote ref does not exist
.xargs
aby zobaczyć, co jest faktycznie wykonywane.origin/
prefiksu do nazwy gałęzi, git już wie, że pracujesz z gałęziami pochodzenia, odkąd jesteś uruchomionygit push origin
. Mykoła zaproponowałxargs echo
raczej ostatnią część polecenia niżecho xargs [...]
.Służy
sed
do usuwania części „pochodzenia /” i zmianyxargs
części lttile .źródło