Jak lokalnie usunąć oddział?

159

Mam w swoim repozytorium master i dev branch. Chcę usunąć gałąź master z mojego komputera, aby przypadkowo się do niej nie zobowiązać (tak się stało ...).

Pojawiają się tutaj pytania dotyczące lokalnego i zdalnego usuwania oddziałów , ale nie byłem w stanie dowiedzieć się, jak usunąć oddział tylko lokalnie.

Jedna odpowiedź mówi, że używa tego:

git branch -d local_branch_name

Ale próbowałem tego i gałąź nadal pojawia się w aplikacji GitHub.

Nate
źródło
Jakie są wyniki tego polecenia? W jakiej gałęzi jesteś? Jak to wygląda w konsoli?
SLaks
@SLaks Miałem typ w moim pytaniu. W konsoli faktycznie mówi, że gałąź została usunięta, ale w aplikacji GitHub (nawet po jej ponownym uruchomieniu) gałąź i zatwierdzenie są nadal widoczne. Wynik toDeleted branch master (was e8a8e29).
Nate
GitHub dla Windows pokazuje również zdalne gałęzie
SLaks
@SLaks Więc po usunięciu gałęzi lokalnie, jeśli kliknę na nią w aplikacji GitHub dla Windows, czy jest to po prostu ponowne klonowanie? Chcę uniemożliwić sobie bezpośrednie wprowadzanie zmian w gałęzi głównej.
Nate

Odpowiedzi:

114

Myślę (na podstawie twoich komentarzy), że rozumiem, co chcesz zrobić: chcesz, aby lokalna kopia repozytorium nie miała ani zwykłej gałęzi lokalnej master, ani gałęzi zdalnego śledzenia origin/master, nawet jeśli repozytorium, które sklonowałeś - github —Ma lokalną gałąź master, której nie chcesz usunąć z wersji github.

Możesz to zrobić, usuwając lokalnie gałąź zdalnego śledzenia, ale po prostu powróci za każdym razem, gdy poprosisz swojego gita o zsynchronizowanie twojego lokalnego repozytorium ze zdalnym repozytorium, ponieważ twój git pyta git "jakie masz gałęzie" i to mówi „mam master”, więc twój git (re) tworzy origin/masterdla ciebie, więc twoje repozytorium ma to, co ich ma.

Aby lokalnie usunąć gałąź zdalnego śledzenia za pomocą interfejsu wiersza poleceń:

git branch -d -r origin/master

ale znowu, po prostu wróci po ponownej synchronizacji. Możliwe jest również pokonanie tego (za pomocą remote.origin.fetchmanipulacji), ale prawdopodobnie lepiej będzie po prostu być na tyle zdyscyplinowanym, aby nie tworzyć ani nie modyfikować masterlokalnie.

torek
źródło
Powiązane: Jak sklonować pojedynczą gałąź w git?
Tobias Kienzler
99

Wymuś usunięcie lokalnego oddziału:

$ git branch -D <branch_name>

[ UWAGA ]:

"-D" jest opcją wymuszonego usuwania.


Benyamin Jafari
źródło
6
Jeśli usunę lokalną gałąź, która miała ustawiony upstream, a następnie wykonam normalne wypychanie, nie usunie to gałęzi zdalnej, prawda?
Fueled By Coffee
1
@FueledByCoffee Oto odpowiedź na to pytanie
Benyamin Jafari
17

O ile rozumiem pierwotny problem, przez pomyłkę dodałeś zatwierdzenia do lokalnego serwera głównego i jeszcze nie wprowadziłeś zmian. Teraz chcesz anulować zmiany i masz nadzieję na usunięcie lokalnych zmian i utworzenie nowej gałęzi głównej ze zdalnej.

Możesz po prostu zresetować zmiany i ponownie załadować master ze zdalnego serwera:

git reset --hard origin/master
Eugene Kaurov
źródło
13

Aplikacja Github dla Windows pokazuje wszystkie zdalne gałęzie repozytorium. Jeśli usunąłeś oddział lokalnie z rozszerzeniem$ git branch -d [branch_name] , zdalna gałąź nadal istnieje w repozytorium Github i pojawi się niezależnie w aplikacji Windows Github.

Jeśli chcesz całkowicie usunąć gałąź (również zdalnie), użyj powyższego polecenia w połączeniu z $ git push origin :[name_of_your_new_branch]. Ostrzeżenie: to polecenie usuwa wszystkie istniejące gałęzie i może spowodować utratę kodu. Uważaj, nie sądzę, żeby to było to, co próbujesz zrobić.

Jednak za każdym razem, gdy usuniesz zmiany lokalnego oddziału, zdalna gałąź będzie nadal wyświetlana w aplikacji. Jeśli nie chcesz dalej wprowadzać zmian, po prostu zignoruj ​​to i nie klikaj, w przeciwnym razie możesz sklonować repozytorium. Jeśli masz więcej pytań, daj mi znać.


źródło
1

musisz przełączyć się do innej gałęzi i spróbować tego samego.

git branch -d

Kumar Vaduganathan
źródło
1
Czy to ma być odpowiedź? Albo pytanie wyjaśniające? Albo zwykłe pytanie? Jest tak krótki, że nie mogę powiedzieć. Chciałbyś rozwinąć temat?
Yunnosch
0

Po tagach zakładam, że używasz Githuba. Dlaczego nie utworzyć reguł ochrony gałęzi dla swojej gałęzi głównej? W ten sposób, nawet jeśli spróbujesz popchnąć do mistrzostwa, odrzuci to.

1) Przejdź do zakładki „Ustawienia” repozytorium na Github.

2) Kliknij „Oddziały” w menu po lewej stronie.

3) Kliknij „Dodaj regułę”

4) Wpisz „wzorzec” dla wzorca gałęzi.

5) Zaznacz „Wymagaj recenzji żądania ściągnięcia przed połączeniem”

Poleciłbym również zrobić to samo dla twojej gałęzi deweloperów.

Qamar Stationwala
źródło