Предположим, у нас есть стабильное приложение.
Завтра кто-то сообщит о большой старой ошибке, которую мы решили исправить сразу. Таким образом, мы создаем ветку для этого исправления из «master», мы называем его «2011_Hotfix» и поднимаем его, чтобы все разработчики могли совместно исправлять его.
Мы исправляем ошибку и объединяем «2011_Hotfix» с «master», а также с текущей веткой разработки. И нажать «мастер».
Что мы делаем с «2011_Hotfix» сейчас? Должно ли оно оставаться вечным до конца времени как ветвь, или теперь мы должны удалить его, поскольку он выполнил свою задачу? Кажется нечистым просто оставлять ветки повсюду, так как список ветвей, вероятно, станет очень длинным, большинство из которых больше не нужны.
Если он будет удален, что будет с его историей? Будет ли это поддерживаться, даже если фактическая ветвь больше не доступна? Кроме того, как мне удалить удаленную ветку?
источник
Ответы:
Вы можете безопасно удалить ветку с помощью
git branch -d yourbranch
. Если он содержит неоплаченные изменения (т. Е. Вы потеряете коммиты, удалив ветку), git сообщит вам и не удалит его.Таким образом, удаление объединенной ветви дешево и не заставит вас потерять историю.
Чтобы удалить удаленную ветку, используйте
git push origin :mybranch
, предполагая, что ваше удаленное имя является источником, а удаленная ветка, которую вы хотите удалить, называется mybranch.источник
master
, так что это делает вещи намного чище.--no-merged
по умолчанию? Я попытался,git config --global --add branch.noMerged true
и это было добавлено, но это не имело никакого значения.Что вам нужно сделать, это пометить все, что вы выпускаете. Держите ветви вокруг, когда вы активно развиваетесь.
Удалить старые ветви с
Удалить их с сервера с
или старый синтаксис
который читается как «ничего не вставлять в имя_в ветви в источнике».
Тем не менее, до тех пор, пока DAG (направленный ациклический граф) может указывать на него, коммиты будут в истории.
Google "git-flow", и это может дать более глубокое понимание управления выпусками, ветвлениями и тегами.
источник
Поскольку в вопросе есть тег «github», я бы также добавил следующее: в частности, в Github , если вы извлекаете запрос на ветку, и она объединяется (либо через пользовательский интерфейс, либо путем объединения ветви запроса извлечения), вы не будете потерять данные запроса на получение (включая комментарии), даже если вы удалите ветку .
Следствие этого: если вы включаете запросы на получение данных как часть вашего рабочего процесса (который прекрасно сочетается с обзорами кода), вы можете безопасно удалять ветви, как только они объединяются. Это настолько распространенное явление, что недавно Github добавил (приятную) функцию, которая нажимает кнопку «удалить ветку» сразу после объединения запроса на извлечение.
Но стоит отметить, что каждая группа должна принять рабочий процесс, который подходит ей лучше всего (и это может или не может привести к удалению таких ветвей). Моя текущая рабочая группа, например, удаляет все ветви, которые не являются основными или не связаны с развертыванием (например, производство, подготовка и т. Д.), Как только их запросы извлечения объединяются, и у нас все еще есть полное отслеживание того, как сформировались соответствующие коммиты. каждое постепенное улучшение каждого продукта.
Конечно, никакое управление историей (запросы на извлечение или иное) не заменяет надлежащую маркировку версий (которую предпочтительно автоматизировать с помощью того же инструмента / скрипта, который развертывает / упаковывает версию), поэтому вы всегда можете быстро переключиться на то, что происходит у ваших пользователей. в данный момент. Пометка также является ключом к решению вашей первоначальной проблемы: если вы установили, что любая ветка, слитая с «рабочими» ветвями, может и должна быть удалена, а любая ветка с тегом версии, «производственная» и т. Д. Не должна вы всегда будете иметь исправления, пока они не будут интегрированы в будущую версию.
источник
Я бы добавил, что недостатком удаления веток является то, что вы нарушаете любые гиперссылки на эти ветки на GitHub (этот вопрос помечен как github). Вы получите
404 Not Found
ошибку для этих ссылок. Вот почему я изменяю свои ссылки, чтобы они указывали на коммит или тег после удаления ветки на GitHub.Поскольку некоторые ссылки не могут быть изменены, например, по электронной почте, я теперь избегаю гиперссылок на ветви GitHub целиком и ссылок на коммит или тег с первого дня.
Я предпочитаю удалять ветви после их объединения. Это предотвращает визуальный беспорядок длинного списка веток в вашем хранилище. Эти ветви также распространяются на все вилки хранилища.
Сначала я удаляю свою локальную ветку. Это предотвращает его случайное нажатие позже.
Затем я удаляю ветку удаленного отслеживания
Затем я удаляю ветку на GitHub. Я использую веб-интерфейс, но эквивалентная команда ниже.
Даже если ветвь никогда не объединяется, обычно я хотел бы сохранить коммиты для потомков. Однако я все еще люблю удалять ветку. Чтобы распространить коммиты и предотвратить их использование сборщиком мусора, я делаю аннотированный тег, указывающий на тот же коммит, что и удаленная ветвь.
Затем я нажимаю тег на GitHub
источник
Кажется, вы хотите удалить
2011_Hotfix
ветку, не потеряв ее историю. Я буду обсуждать удаление первого и историю второго.Обычные
git
методы удаления веток уже были описаны выше, и они работают как положено.git
не имеет команды из одного или двух слов, которая означает: «Эйgit
, удалите как локальную, так и удаленную ветку». Но это поведение можно имитировать с помощью сценария оболочки. Например, возьмите сценарий оболочки Зака Холмана «git-nuke» . Это очень просто:Поместите это в исполняемый файл (например,
git-nuke
) в одном из ваших$PATH
каталогов. Если вы не в2011_Hotfix
ветке, вы просто работаетеgit-nuke 2011_Hotfix
, удалит как локальную, так и удаленную ветки. Это намного быстрее и проще - хотя, возможно, более опасно - чем стандартныеgit
команды.Ваша забота о сохранении истории хороша. В этом случае вам не нужно беспокоиться. После слияния
2011_Hotfix
наmaster
все коммиты из2011_Hotfix
будут добавлены кmaster
«s история коммитов. Короче говоря, вы не потеряете историю от простого слияния.Я хочу добавить еще одно слово, которое, возможно, выходит за рамки вашего вопроса, но, тем не менее, уместно. Давайте представим, что есть 20 крошечных «незавершенных» коммитов
2011_Hotfix
; однако вы хотите,2011_Hotfix
чтобы вmaster
историю добавлялся только один полный коммит . Как объединить все 20 маленьких коммитов в один большой коммит? К счастью,git
позволяет объединить несколько коммитов в один коммит с помощьюgit-rebase
. Я не буду объяснять здесь, как это работает; хотя, если вам интересно, документация наgit-rebase
отлично. Обратите внимание, чтоgit rebase
переписывает историю, поэтому она должна использоваться разумно, особенно если вы новичок в этом. Наконец, ваш2011_Hotfix
сценарий о команде разработчиков, а не об одиночном. Если члены команды проекта используютgit rebase
Для команды целесообразно иметь четкие руководящие указания по использованиюgit rebase
, чтобы какой-нибудь ковбойский разработчик в команде невольно не повредилgit
историю проекта .источник
Если он был успешно объединен и, возможно, даже помечен, я бы сказал, что он больше не нужен. Так что можете смело делать
git branch -d branchname
.источник
Если вы хотите удалить локальные ветви, которые были удалены из источника, вы также можете удалить, используя
git fetch
источник
Вы можете удалить ветки во всех основных веб-интерфейсах, таких как github, BitBucket. После удаления ветки онлайн вы можете удалить локальную ветку, используя
источник