Видалення гілки Git


79

Що означає в Git "видалення" гілки?

Це буде видалено зі сховища? Або вона все одно буде навігаційною через git branch?

Що я справді хочу зробити, це позначити гілку як "тупик", тобто гілка настільки далека від господаря, що ніхто не повинен використовувати її як вихідну точку, хоча в цій гілці було кілька хороших ідей, тому ми хотіли б зберегти його, для довідки.

Відповіді:


157

Ви можете видалити гілку, але спочатку позначте її, щоб історія не зникла. Таким чином, гілка не відображається у списку філій, що, сподіваємось, повинно стримувати людей від роботи над нею, але робота не буде остаточно стерта (навіть після запуску збору сміття). Наприклад, коли у мене є гілка, яка стала неактуальною, але я не готовий остаточно її видалити, я позначаю це як "archive / < назва-гілки >".

Перебуваючи на masterабо на якійсь іншій гілці:

git tag archive/foo foo
git branch -D foo

Це створює тег, названий archive/fooз fooгілки перед видаленням foo. Ви також можете додати до тегу повідомлення, яке пояснює, що є у гілці, чому вона існувала, чому зараз тупик тощо.

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

Можливість фіксувати причину припинення гілки є, можливо, перевагою тегування в порівнянні з переміщенням гілок до альтернативного простору імен.

Якщо вам коли-небудь потрібно буде відновити гілку, яка була заархівована таким чином, це просто:

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

Тепер гілка повернулася так, ніби її ніколи не видаляли.


5
@sardaukar: Це також може працювати з віддаленими репозиторіями, натискаючи тег архіву (за допомогою --tagsопції git push), а потім видаляючи віддалену гілку (використовуючи :<branch-to-delete>refspec під час натискання). Наприклад:git tag archive/foo foo; git branch -D foo; git push --tags origin :foo
Dan Molding

Було б непогано, якби git мав спосіб автоматично повідомити людей "ця гілка заархівована" і показати повідомлення коміту, якби люди намагалися витягнути з архівованої гілки, але це не так.
Робін Грін

1
Дуже приємна відповідь, саме те, що я шукав! Щоб бути впевненим, чи корисно це, якщо гілка була об’єднана назад із головним до видалення?
claf

Ще одне пов’язане питання (якщо хтось все ще стежить за цією темою) - як мені «закрити» (об’єднати в майстер чи архівувати в тегу чи що завгодно), якщо в цій гілці брало участь кілька розробників? видалення та позначення гілки (як локальної, так і віддаленої) не надто грубий для інших розробників цієї гілки?
claf

1
ця відповідь є чудовим, блискучим рішенням
Крістофер Томас

2

Гілки Git зберігаються як посилання на версію. Якщо видалити гілку, посилання видаляється; якщо ніщо інше не посилається на цю версію, це врешті-решт буде зібране сміття. Крім того, якщо ви видалите гілку, вона належним чином зникла (із вашого сховища). Якщо ви хочете позначити гілку як застарілу, але зберегти її для подальшого використання, ви можете перемістити гілку до підкаталогу:

$ 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

Крім того, ви можете створити окреме сховище для застарілих гілок, перетягнути їх, а потім видалити з оригіналу. У будь-якому випадку ви вплинете на будь-яких користувачів, які стежать за гілками - вміст їхнього сховища не зміниться (як і жодне з назв їхніх гілок), але якщо вони спробують повторити, вони повинні змінити ціль у своїй конфігурації.


2

git branch -D <branchName>видалить вашу гілку зі сховища. Ви більше не зможете його побачити або орієнтуватися. Також ви втратите всі зміни файлів, зроблені у цій гілці.

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


0

Він не буде доступний через гілку git, і поки не буде здійснено збір сміття, він не буде втрачений зі сховища.

Якщо ви хочете позначити відповідну гілку як тупик, тоді просто зробіть це (git, можливо, не зробить це за вас, але ви, звичайно, можете)!

Позначення його (будь-яким способом, який вам більше подобається) як історичної довідкової роботи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.