Jak zamknąć gałąź Git?

112

więc zaczynam od Git + GitHub.

W naszym małym rozproszonym zespole każdy członek tworzy własny oddział dla każdego przydzielonego problemu / wymagania.

  1. git branch Issue#1 <-- create this branch
  2. git checkout issue#1 <-- switch over to this branch

Teraz code code, commit, code, commit, itd ...

następnie pull request, code-fixup, commit, code, commit.. itd.

i WRESZCIE ... żądanie ściągnięcia jest akceptowane.

Woot.

ale… co teraz? (......niezręczny......)

Czy osoba, która utworzyła oddział na lokalnym komputerze deweloperskim, musi ... zamknąć oddział? Sugestia dotyczyła dewelopera, aby usunąć gałąź `(... -D ...), a następnie wykonać ściągnięcie / odświeżenie mastera ..., co spowoduje pobranie całego kodu gałęzi.

Hmmmmm ... nie jestem pewien - proszę o pomoc :)

Pure.Krome
źródło
16
Gałąź w Git jest po prostu etykietą na konkretnym zatwierdzeniu - więc w zasadzie, jeśli już jej nie potrzebujesz - po prostu usuń tę „gałąź” (tę „etykietę” na tym zatwierdzeniu). Lokalnie, po prostu zrób git branch Issue#1 -di to wszystko - żaden kod nie zostanie utracony, tylko etykieta zostanie usunięta z repozytorium
marc_s
1
@marc_s Proponuję po prostu odpowiedzieć na to pytanie :)
KingCrunch
Więc @marc_s - mówisz, że standardowa praktyka, gdy już skończysz swoją gałąź ... i gałąź została wypchnięta ... czy ją usunąć? A co z połączeniem?
Pure.Krome,
@ Pure.Krome Przynajmniej założyłem, że przez „pull request jest akceptowane” masz na myśli, że jest już scalone. Tak, oczywiście, zintegruj zmiany z master, developlub cokolwiek nazywa się twoja gałąź rozwoju (Merge, Rebase (with / without squash), ...)
KingCrunch
kiedy powiedziałem „pull request jest akceptowany”… dzieje się to gdzie indziej. (tj. odpowiedzialny programista, który zatwierdza cały kod, który jest objęty PR ...). Zastanawiałem się, czy powinienem przełączyć się na master na MOJEJ lokalnej maszynie deweloperskiej i również dokonać scalenia.
Pure.Krome,

Odpowiedzi:

181

Żądamy, aby deweloper proszący o żądanie ściągnięcia stwierdził, że chciałby usunąć gałąź. W większości przypadków tak jest. Są chwile, kiedy gałąź jest potrzebna (np. Skopiowanie zmian do innej gałęzi wydania).

Moje palce zapamiętały nasz proces:

git checkout <feature-branch>
git pull
git checkout <release-branch>
git pull
git merge --no-ff <feature-branch>
git push
git tag -a branch-<feature-branch> -m "Merge <feature-branch> into <release-branch>"
git push --tags
git branch -d <feature-branch>
git push origin :<feature-branch>

Oddział jest do pracy. Znacznik oznacza miejsce w czasie. Oznaczając każdą scaloną gałąź, możemy wskrzesić gałąź, jeśli jest taka potrzeba. Znaczniki rozgałęzień były wielokrotnie używane do przeglądania zmian.

Bill Door
źródło
8
Niedawno wprowadziliśmy zmianę w naszej procedurze. Używanie git push --tagsjest trudne i powoduje pobranie wszystkich tagów. Utrudnia to posiadanie własnych lokalnych tagów. Zamiast tego używamy git push origin branch-<feature-branch>tylko jednego tagu.
Bill Door
Więc ostatnia linia, musisz pamiętać, aby użyć nazwy tagu dla gałęzi funkcji, którą poprzednio ustawiliśmy na „gałąź- <gałąź-cecha>”, a nie tylko <gałąź-cecha>. Poprawny?
Premier Bromanov
@PremierBromanov ostatnia linia służy do usuwania zdalnego oddziału. Zapamiętajcie tag, którego użyli @BillDoor git push --tags.
Deivide
Znakomity skrypt !!
Kike Gamboa,
41

Tak, po prostu usuń gałąź, uruchamiając git push origin :branchname. Aby później naprawić nowy problem, ponownie odłącz się od głównego.

Gaurav Gupta
źródło
3
Spowoduje to usunięcie zdalnej gałęzi, a nie lokalnej.
KingCrunch
5
Nie wiem, dlaczego jest to zmodyfikowane na -2, to jest poprawna odpowiedź. Zdecydowanie mają zdalny oddział, jak inaczej mogliby wystawić przeciwko niemu PR?
Ana Betts
Jeśli to zrobisz, a następnie wykonasz polecenie git pull, czy nie spowoduje to również usunięcia Twojego lokalnego oddziału? (Edycja: nm, widzę, że wyraźnie nie działa, chyba że uruchomisz git remote prune.)
Tim Keating,
1
Co się dzieje z historią oddziału?
geoidesic
40

po zakończeniu kodu najpierw połącz gałąź do mastera, a następnie usuń tę gałąź

git checkout master
git merge <branch-name>
git branch -d <branch-name>
Dau
źródło
i to jest na mojej własnej maszynie deweloperskiej, prawda? główna osoba, która akceptuje nowy kod ... jego maszyna znajduje się gdzie indziej.
Pure.Krome,
2
Jeśli ktoś inny wykonuje scalanie, zwykle ma wskaźnik gałęzi w osobnym pilocie, np. Nadawca / nazwa-gałęzi. Będzie musiał użyć, git remote prune senderaby się go również pozbyć po tym, jak to zrobiłeś - chociaż w większości przypadków nie musi się tym przejmować.
jørgensen
1
Nigdy nie powinieneś łączyć własnej gałęzi, chyba że jesteś osobą odpowiedzialną za integrację jej z głównym drzewem. Jeśli tak nie jest i poprosiłeś kogoś innego o integrację, zaktualizuj gałąź główną o nowe zdalne commity - powinny one zawierać wszystko, o co prosiłeś - a następnie usuń gałąź. Gwarantuje to, że nie będziesz mieć żadnych problemów, jeśli drugi facet zmieni coś.
ThiefMaster