Pytanie Usunięcie gałęzi Git


W Git, co oznacza "skreślenie" oddziału?

Czy zniknie z repozytorium? Czy nadal będzie można nawigować przez via git branch?

Tym, co naprawdę chcę zrobić, jest oznaczenie gałęzi jako "ślepego zaułka", tj. Gałąź jest tak daleko od pana, że ​​nikt nie powinien jej używać jako punkt wyjścia, chociaż w tej gałęzi było kilka dobrych pomysłów, więc lubię to zatrzymać, dla odniesienia.


76
2018-02-26 15:52


pochodzenie




Odpowiedzi:


Możesz usunąć gałąź, ale najpierw ją tagować, aby historia nie zniknęła. W ten sposób gałąź nie pojawia się na liście gałęzi, co powinno odstraszyć ludzi od pracy nad nią, ale praca nie zostanie trwale usunięta (nawet po uruchomieniu wyrzucania śmieci). Na przykład, gdy mam gałąź, która stała się nieistotna, ale nie jestem gotowa na jej trwałe usunięcie, oznaczam ją jako "archiwum / <Nazwa oddziału> ".

W trakcie master lub inny oddział:

git tag archive/foo foo
git branch -D foo

Spowoduje to utworzenie znacznika o nazwie archive/foo z foo gałąź przed usunięciem foo. Możesz także dodać wiadomość do tagu, która wyjaśnia, co jest w gałęzi, dlaczego istnieje, dlaczego jest teraz ślepym zaułkiem itp.

git tag -m 'Foo is deprecated in favor of bar' archive/foo foo

Możliwość rejestrowania, dlaczego gałąź jest przestarzała, jest prawdopodobnie zaletą tagowania versus przenoszenia gałęzi do alternatywnej przestrzeni nazw.

Jeśli kiedykolwiek zajdzie potrzeba wskrzeszenia oddziału, który został zarchiwizowany w ten sposób, jest to tak proste, jak:

git branch foo archive/foo
git tag -d archive/foo       # Optional

Teraz oddział powrócił, jakby nigdy nie został usunięty.


152
2018-02-26 18:06



jak to działa w przypadku zdalnych repo? - Bruno Antunes
@sardaukar: To może również działać ze zdalnymi repo poprzez naciśnięcie znacznika archiwum (używając --tags opcja do git push), a następnie usunięcie zdalnego oddziału (przy użyciu :<branch-to-delete>refspec podczas pchania). Na przykład: git tag archive/foo foo; git branch -D foo; git push --tags origin :foo - Dan Moulding
Byłoby miło, gdyby git miał sposób na automatyczne informowanie ludzi, że "ta gałąź została zarchiwizowana" i pokazanie komunikatu zatwierdzenia, jeśli ludzie próbowali pobrać z archiwizowanej gałęzi, ale tak nie jest. - Robin Green
Bardzo dobra odpowiedź, dokładnie to, czego szukałem! Po prostu, czy jest to przydatne, jeśli oddział został połączony z powrotem do wzorca przed usunięciem? - claf
ta odpowiedź jest świetnym, genialnym rozwiązaniem - Christopher Thomas


Gałęziny Git są przechowywane jako odniesienia do wersji. Jeśli usuniesz gałąź, odwołanie zostanie usunięte; jeśli nic innego nie wspomnie o tej rewizji, ostatecznie zostanie zebrane śmieci. Ponadto, jeśli usuniesz gałąź, zostanie ona poprawnie usunięta (z twojego repozytorium). Jeśli chcesz oznaczyć gałąź jako przestarzałą, ale zachować ją do późniejszego wykorzystania, możesz przenieść gałąź do podkatalogu:

$ git branch
* master
  testing_feature_one
  testing_feature_two
$ git branch -m testing_feature_one deprecated/testing_feature_one
$ git branch
  deprecated/testing_feature_one
* master
  testing_feature_two

Alternatywnie możesz utworzyć oddzielne repozytorium dla przestarzałych gałęzi, przeciągnąć je i usunąć z oryginału. W obu przypadkach będziesz mieć wpływ na użytkowników, którzy śledzą gałęzie - zawartość ich repozytorium się nie zmieni (i żadna z nazw ich gałęzi), ale jeśli spróbują ponownie pobrać, będą muszą zmienić cel w swojej konfiguracji.


2
2018-02-26 16:15





git branch -D <branchName> usunie twoją gałąź z repozytorium. Nie będziesz już mógł tego oglądać ani nawigować. Ponadto utracisz wszystkie zmiany plików dokonane w tej gałęzi.

https://git-scm.com/docs/git-branch


2
2018-02-26 15:55





Nie będzie możliwe nawigowanie przez gałąź git i dopóki nie zostanie wykonane usuwanie śmieci, nie zostanie utracone z repozytorium.

Jeśli chcesz oznaczyć daną gałąź jako ślepy zaułek, po prostu zrób to (git może tego nie zrobić, ale na pewno możesz)!

Etykietowanie go (w dowolny sposób), jak działa odniesienie historyczne.


0
2018-02-26 16:29