git branch -d daje ostrzeżenie

91

Chcę tylko lepiej zrozumieć komunikat ostrzegawczy po usunięciu lokalnego oddziału

ostrzeżenie: usuwanie gałęzi 'old_branch', która została scalona 'refs/remotes/origin/old_branch', ale jeszcze nie scalona HEAD.

user1322228
źródło
29
jeśli scalisz --squash your old_branch, otrzymasz to ostrzeżenie zawsze, gdy usuniesz go lokalnie. Kiedy zgniatanie, twój indeks jest resetowany, dlatego nie pasuje do old_branch HEAd
Antoine Wils
Podczas gdy inne odpowiedzi są poprawne, komentarz Antoine'a był powodem przynajmniej w moim przypadku.
Squrppi

Odpowiedzi:

66

To tylko ostrzeżenie, że zmiany zostały przeniesione do gałęzi origin, ale nie są one scalane master, więc usuwasz je tylko lokalnie.

Ostrzega, że ​​nie masz już lokalnej kopii tego oddziału, ale istnieje w origin

Jeśli chcesz usunąć również zdalną gałąź, użyj git push --delete origin old_branch

cjhveal
źródło
9
Tak, masternie jest w to zamieszany. Masz na myśli raczej obecną gałąź. ;)
Fernando Espinosa
1
Otrzymuję to ostrzeżenie, nawet jeśli wykonam operację, git branch -d branch_namektóra ma tylko usunąć oddział lokalnie. Dlaczego w tym przypadku potrzebne jest ostrzeżenie?
Akshay Damle
2
Ale origin / old_branch jest łączony w origin / master. Później zrobiłem git pull origin na gałęzi głównej. Wciąż ten sam błąd. Czy to nie jest błąd w GH?
vikramvi
36

Zakładając, że aktualnie się masterwyrejestrowałeś, oznacza to, że zmiany wprowadzone w old_branchnie są obecne w master. Jednak one obecne w old_branchsprawie origin.

Karl Bielefeldt
źródło
4
Tak. To jest poprawna odpowiedź! „ale jeszcze nie scalony z HEAD”, HEADtutaj odwołuje się do HEAD lokalnej gałęzi głównej.
Devy
3
Ale origin / old_branch jest łączony w origin / master. Później zrobiłem git pull origin na gałęzi głównej. Wciąż ten sam błąd. Czy to nie jest błąd w GH?
vikramvi
1
@vikramvi Zakładając, że dokonałeś masterwyewidencjonowania lokalnie, może to nadal wystąpić, jeśli zmienił się SHA któregokolwiek z zatwierdzeń; tj. oparłeś się origin/old_branchna origin/master. Nawet jeśli było to szybkie przyspieszenie, wygeneruje to nowy SHA dla każdego nowego zatwierdzenia z origin/old_branch, powodując, że git zobaczy oryginalne SHA w twoim lokalnym old_branchjako nie scalone po ściągnięciu zmian do twojego lokalnego masteroddziału. Możesz zobaczyć tę odpowiedź i tę odpowiedź, dlaczego tak się dzieje.
8

Oznacza to, że Twój lokalny oddział old_branchjest na bieżąco ze zdalnym oddziałem old_branchna zdalnym, originale nie jest scalany z oddziałem, masterktóry jest uważany za główną gałąź w repozytorium.

To tylko środek ostrożności ze strony gita. Daje ci wskazówkę: może wykonałeś swoją pracę w gałęzi tematycznej i zapomniałeś połączyć ją z gałęzią główną?


aktualizacja

Git ostrzega przed utratą zmian. Na przykład, jeśli nie masz swojego old_branchna głównym gicie, nie pozwól ci nawet usunąć gałęzi, która nie jest scalona z masterem (cóż, pozwala, ale z kluczem, -Dktóry jest force-deleteopcją).

Max Komarychev
źródło
7
Niekoniecznie master, ale aktualne HEAD.
Frozen Flame
Więc -D jest wtedy, gdy nie udostępniłeś usuwanej gałęzi (w rzeczywistości jest to zatwierdzenie) żadnej zdalnej gałęzi. Chociaż ostrzeżenie ma na celu poinformowanie Cię, że udostępniłeś gałąź (zatwierdzenia) pilotowi, ale po prostu nie jest ona scalona z HEAD. HEAD to HEAD, zdalne / refs / HEAD to nie to samo. Ale proszę mnie poprawić, jeśli się mylę co do różnic między zdalnym HEAD a lokalnym HEAD.
Eric,
7

Aby dodać do innych odpowiedzi, może to również oznaczać, że zmiana może zostać scalona z wzorcem, tylko że lokalna kopia wzorca jeszcze jej nie odzwierciedla. Tak czy inaczej, to tylko informuje cię, że lokalna kopia twojego mastera nie zawiera zmian, które wypchnąłeś na origin. Scalone / Nie połączone ... może, może nie

Mithun Nair
źródło