Dlaczego Git używa
git push <remote> :<branch>
jak w
git push origin :featureA
usunąć oddział featureA
ze zdalnego serwera?
Interesuje mnie, dlaczego dwukropek został użyty jako flaga usuwania.
To jest tak różne od git branch -d <localbranch>
.
Dlaczego nie zrobimy czegoś takiego
git branch -d --remote origin <branchname>
czy też jest głębsze znaczenie za symbolem okrężnicy, którego nie znałem?
git push origin --delete foobar
Odpowiedzi:
Nie chodzi o samo znaczenie
:
, ale o to, co jest przed nim obecne, a raczej nieobecne.Format refspec to
(opcjonalnie + dla bez szybkiego przewijania do przodu)
Więc kiedy robisz coś podobnego
git push origin :featureA
, podajesz pusty odnośnik źródłowy i zasadniczo ustawiasz miejsce docelowe jako „puste” lub usuwasz je.PS: Zwróć uwagę, że refspec
:
lub nic nie oznacza, że nic nie naciskasz. Powoduje, że git wypycha „pasujące” gałęzie: dla każdej gałęzi istniejącej po stronie lokalnej zdalna strona jest aktualizowana, jeśli gałąź o tej samej nazwie już istnieje po stronie zdalnej.źródło
git push origin -d <branch>
celu usunięcia igit push origin -D <branch>
wymuszenia usunięcia zdalnej gałęzi.Dwukropek nie jest „flagą usuwania”. Zauważ, że zarówno git push, jak i git pull akceptują zero lub więcej refspecs jako końcowe argumenty. Teraz przeczytaj o refspecs . Dwukropek oddziela źródło od celu w refspec. Polecenie
git push origin :foo
ma puste źródło i zasadniczo mówi „ nie wysyłaj nic do gałęzi foo pochodzenia” lub innymi słowy „spraw, aby gałąź foo na początku nie istniała”.źródło
:foo
. Pusta gałąź nie współdzieli historii z istniejącą gałęzią zdalną, więc nie może, tak jak ja to widzę, nadpisać istniejącej gałęzi zdalnej pustą gałęzią. Coś jest nie tak z Twoją odpowiedzią.