2016-01-09 6 views
9

Mam małe repozytorium z masterem i eksperymentalną gałęzią do testowania nowych funkcji. Zdecydowałem się nie wdrażać tych funkcji na urządzeniu master.Co stanie się z odgałęzieniem git po usunięciu, jeśli nie zostało scalone?

Co dzieje się z zatwierdzeniami oddziału eksperymentalnego, kiedy usuwam gałąź przy użyciu git push origin --delete <branchName>? Czy git zatrzyma jakieś niedostępne resztki? Jeśli dobrze pamiętam, mam tagi w tej gałęzi i jest ono przesyłane do github. Czy to spowoduje jakiś problem?

edit:

Sprawdziłem gitk --all jak sugeruje wykres popełnić wygląda następująco:

commit graph

Co chcę usunąć gałąź babel ze wszystkich jego zobowiązuje, a Nie chcę, żeby było to wspaniałe. czy to możliwe?

Odpowiedz

13

Usunięcie gałęzi spowoduje tylko: Usuń gałąź. Ponieważ gałąź jest po prostu odwołaniem do zatwierdzenia, tylko to odwołanie zniknęło. Zatwierdzenie wciąż tam jest.

Podobnie jak języki programowania, Git ma funkcję czyszczenia pamięci, która ostatecznie usunie obiekty commit, które nie są już przywoływane. Jeśli więc ta gałąź jest jedynym wskaźnikiem do tego zatwierdzenia, stracisz do niego dostęp i zostanie on "skasowany".

Jeśli istnieją inne odwołania, które obejmują inne gałęzie, znaczniki i zatwierdzenia, które pośrednio odwołują się do tego zatwierdzenia (tj. Dla którego to zatwierdzenie jest elementem nadrzędnym), to zatwierdzenie jest nadal przywoływane i nie zostanie usunięte.

Jeśli więc chcesz się pozbyć zobowiązania , musisz usunąć wszystkie odniesienia do tego zatwierdzenia. Jeśli chcesz usunąć gałąź i są inne rzeczy odwołujące się do zatwierdzenia z tej gałęzi, to nie jest to problem i nie spowoduje problemów: pożądane zachowanie polega na tym, że zatwierdzenie jest zachowywane, więc inne rzeczy nie łamią się .

+0

Dzięki! Więc nie mam nic do zrobienia ręcznie na temat tych bezreferencyjnych zatwierdzeń, gc zajmie się nimi. – inf3rno

+1

Tak, ostatecznie. Jeśli chodzi o edycję, usunięcie gałęzi babel (lokalnej i zdalnej) i usunięcie tej skrzynki spowoduje, że te zatwierdzenia będą dostępne do usuwania śmieci. – poke

1

Tak, git zachowa niektóre niedostępne pozostałości - przynajmniej na początek. Zaangażowania, do których nie można uzyskać dostępu z istniejących oddziałów lub tagów, nazywają się zwisającymi zatwierdzeniami. Zobacz to pytanie na przykład: Git: what is a dangling commit/blob and where do they come from?

Jeśli utworzyłeś znaczniki w gałęzi i wepchnąłeś te znaczniki do GitHub, to znaczniki nadal będą istnieć w lokalnym repozytorium, więc zatwierdzenia dostępne z tych tagów nigdy nie zostaną usunięte.

Można użyć na przykład gitk --all aby pokazać wszystkie oddziały i tagi w lokalnym repozytorium, a jeśli widzisz znaczniki, które były na starych gałęzi, które zostały już usunięty, można usunąć każdy tag, jak również przy użyciu

git tag -d TAG-NAME 

usunąć tag lokalnie, a także usunąć tag z GitHub używając:

git push origin :refs/tags/TAG-NAME 

niedostępnych commity są ostatecznie usuwane po git wykonuje zbieranie śmieci w repozytorium. Jak wspomniano w innym pytaniu Stack Overflow, więcej informacji na ten temat można znaleźć w sekcji Maintenance and Data Recovery na stronie git-scm.com.

1

Co dzieje się z zatwierdzeniami oddziału eksperymentalnego, gdy usuwam z tej gałęzi przy użyciu git push origin --delete <branchName>?

Określona gałąź zostanie usunięta z lokalnego i zdalnego repozytorium. Mogę nie być w stanie przywrócić go ponownie.

Czy git zachować niektóre niedostępne resztki?

Zgodnie z tą odpowiedzią, https://stackoverflow.com/a/4674570/1654730, możliwe jest przywrócenie gałęzi przy pomocy reflogu.

Jeśli dobrze pamiętam, mam tagi w tej gałęzi i jest ona przesyłana do github . Czy to spowoduje jakiś problem?

Nie powinno to powodować żadnych problemów. Jeśli posiadasz znaczniki w tej gałęzi, nadal możesz uzyskać dostęp do znaczników i utworzyć na ich podstawie nowy oddział.

Powiązane problemy