Как удалить ветку после merge?
У меня было 2 ветки: master и feature. Я вёл их параллельно и потом решил смержить feature-ветку в master-ветку. После успешного мерджа консоль визуально показывала 2 ветки поэтому я решил удалить ветку feature. Удаление прошло успешно, но после этого консоль всё равно показывает две ветки.
Скажите пожалуйста, можно ли как-нибудь избавиться от feature чтобы не загромождать вид? Теоретически возможна ситуация когда придётся вести одновременно 20 feature веток и выглядеть это будет неудобно, если не чистить.
Ниже код, в который поясняет вопрос:
Switched to branch 'master' md@md ~/.MINT18/code/git/merge $ git hist * 5a8014e 2021-03-08 | m8 (HEAD -> master) [kalinin] |\ | * 4220d18 2021-03-08 | f7 (feature) [kalinin] | * 93062a3 2021-03-08 | f6 [kalinin] | * 02efa31 2021-03-08 | f4 [kalinin] | * 5bde83a 2021-03-08 | f3 [kalinin] * | b417e0e 2021-03-08 | m5 [kalinin] |/ * a3a8961 2021-03-08 | m2 [kalinin] * ede090f 2021-03-08 | m1 [kalinin] md@md ~/.MINT18/code/git/merge $ git br -a feature * master md@md ~/.MINT18/code/git/merge $ git br -D feature Deleted branch feature (was 4220d18). md@md ~/.MINT18/code/git/merge $ git br * master md@md ~/.MINT18/code/git/merge $ git hist * 5a8014e 2021-03-08 | m8 (HEAD -> master) [kalinin] |\ | * 4220d18 2021-03-08 | f7 [kalinin] | * 93062a3 2021-03-08 | f6 [kalinin] | * 02efa31 2021-03-08 | f4 [kalinin] | * 5bde83a 2021-03-08 | f3 [kalinin] * | b417e0e 2021-03-08 | m5 [kalinin] |/ * a3a8961 2021-03-08 | m2 [kalinin] * ede090f 2021-03-08 | m1 [kalinin]
3.3 Ветвление в Git — Управление ветками
Теперь, когда вы уже попробовали создавать, объединять и удалять ветки, пора познакомиться с некоторыми инструментами для управления ветками, которые вам пригодятся, когда вы начнёте использовать ветки постоянно.
Команда git branch делает несколько больше, чем просто создаёт и удаляет ветки. При запуске без параметров, вы получите простой список имеющихся у вас веток:
$ git branch iss53 * master testing
Обратите внимание на символ * , стоящий перед веткой master : он указывает на ветку, на которой вы находитесь в настоящий момент (т. е. ветку, на которую указывает HEAD ). Это означает, что если вы сейчас сделаете коммит, ветка master переместится вперёд в соответствии с вашими последними изменениями. Чтобы посмотреть последний коммит на каждой из веток, выполните команду git branch -v :
$ git branch -v iss53 93b412c Fix javascript issue * master 7a98805 Merge branch 'iss53' testing 782fd34 Add scott to the author list in the readme
Опции —merged и —no-merged могут отфильтровать этот список для вывода только тех веток, которые слиты или ещё не слиты в текущую ветку. Чтобы посмотреть те ветки, которые вы уже слили с текущей, можете выполнить команду git branch —merged :
$ git branch --merged iss53 * master
Ветка iss53 присутствует в этом списке потому что вы ранее слили её в master . Те ветки из этого списка, перед которыми нет символа * , можно смело удалять командой git branch -d ; наработки из этих веток уже включены в другую ветку, так что ничего не потеряется.
Чтобы увидеть все ветки, содержащие наработки, которые вы пока ещё не слили в текущую ветку, выполните команду git branch —no-merged :
$ git branch --no-merged testing
Вы увидите оставшуюся ветку. Так как она содержит ещё не слитые наработки, попытка удалить её командой git branch -d приведёт к ошибке:
$ git branch -d testing error: The branch 'testing' is not fully merged. If you are sure you want to delete it, run 'git branch -D testing'.
Если вы действительно хотите удалить ветку вместе со всеми наработками, используйте опцию -D , как указано в подсказке.
Если в качестве аргумента не указан коммит или ветка, то опции —merged и —no-merged покажут что уже слито или не слито с вашей текущей веткой соответственно.
Вы всегда можете указать дополнительный аргумент для вывода той же информации, но относительно указанной ветки предварительно не извлекая и не переходя на неё.
$ git checkout testing $ git branch --no-merged master topicA featureB
Переименование ветки
Не переименовывайте ветки, которые всё ещё используются другими участниками. Не переименовывайте ветку в master/main/mainline, не прочитав раздел «Изменение имени главной ветки».
Предположим, у вас есть ветка с именем bad-branch-name , и вы хотите изменить её на corrected-branch-name , сохранив при этом всю историю. Вместе с этим, вы также хотите изменить имя ветки на удалённом сервере (GitHub, GitLab или другой сервер). Как это сделать?
Переименуйте ветку локально с помощью команды git branch —move :
$ git branch --move bad-branch-name corrected-branch-name
Ветка bad-branch-name будет переименована в corrected-branch-name , но это изменение пока только локальное. Чтобы все остальные увидели исправленную ветку в удалённом репозитории, отправьте её туда:
$ git push --set-upstream origin corrected-branch-name
Теперь проверим, где мы сейчас находимся:
$ git branch --all * corrected-branch-name main remotes/origin/bad-branch-name remotes/origin/corrected-branch-name remotes/origin/main
Обратите внимание, что текущая ветка corrected-branch-name , которая также присутствует и на удалённом сервере. Однако, старая ветка всё ещё по-прежнему там, но её можно удалить с помощью команды:
$ git push origin --delete bad-branch-name
Теперь старое имя ветки полностью заменено исправленным.
Изменение имени главной ветки
Предупреждение
Изменение имени ветки, например master/main/mainline/default, сломает интеграции, службы, вспомогательные утилиты и скрипты сборки, которые использует ваш репозиторий. Прежде чем сделать это, обязательно проконсультируйтесь с коллегами. Также убедитесь, что вы выполнили тщательный поиск в своём репозитории и обновили все ссылки на старое имя ветки в вашем коде или скриптах.
Переименуйте локальную ветку master в main с помощью следующей команды:
$ git branch --move master main
После этого, локальной ветки master больше не существует, потому что она была переименована в ветку main .
Чтобы все остальные могли видеть новую ветку main , вам нужно отправить её в общий репозиторий. Это делает переименованную ветку доступной в удалённом репозитории.
$ git push --set-upstream origin main
В итоге, состояние репозитория становится следующим:
$ git branch --all * main remotes/origin/HEAD -> origin/master remotes/origin/main remotes/origin/master
Ваша локальная ветка master исчезла, так как она заменена веткой main . Ветка main доступна в удалённом репозитории. Старая ветка master всё ещё присутствует в удалённом репозитории. Остальные участники будут продолжать использовать ветку master в качестве основы для своей работы, пока вы не совершите ряд дополнительных действий.
Теперь, для завершения перехода на новую ветку перед вами стоят следующие задачи:
- Все проекты, которые зависят от текущего, должны будут обновить свой код и/или конфигурацию.
- Обновите конфигурацию всех запускаемых тестов.
- Исправьте скрипты сборки и публикации артефактов.
- Поправьте настройки репозитория на сервере: задайте новую ветку по умолчанию, обновите правила слияния, а также прочие настройки, которые зависят от имени веток.
- Обновите документацию, исправив ссылки, указывающие на старую ветку.
- Слейте или отмените запросы на слияние изменений, нацеленные на старую ветку.
После того, как вы выполнили все эти задачи и уверены, что ветка main работает так же, как ветка master , вы можете удалить ветку master :
$ git push origin --delete master
Нужно ли удалять ветку после слияния её с другой?
В проекте есть ветка master . От нее ответвлена dev , а от dev идут ветки отдельных фиксов, назовем fix .
Т.е. проект выглядит как master -> dev -> fix . После объединения веток dev и fix , в репозитории сохранилась ветка fix .
git checkout dev git merge master > git branch > fix >*dev > master
Надо ли ее удалять или она так и должна висеть там?
Отслеживать
33.9k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака
задан 9 июн 2015 в 4:27
1,293 1 1 золотой знак 15 15 серебряных знаков 35 35 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Можно вполне спокойно удалить. Многие так и делают, что бы просто не мозолило глаза в списке веток.
Тем не менее, это совершенно не обязательно — если не хотите, можете и оставить.
Ну и естественно не стоит удалять постоянные ветки, которые в команде условлено использовать для постоянного процесса разработки, например созданные для соответствия тому-же Gitflow Workflow. Т.е. если вы скажем, влили ветку develop в master, закончив работу над некой функциональностью, то постоянно удалять ветвь develop после слияния — крайне глупая затея.
Отслеживать
ответ дан 9 июн 2015 в 4:36
Sergey Rufanov Sergey Rufanov
8,470 24 24 серебряных знака 37 37 бронзовых знаков
В большинстве случаев, после слияния можно безопасно удалить отработанную ветку
git branch -d имяВетки
В случае если git посчитает что ветка не была полностью слита, он покажет предупреждение и откажется удалять ветвь. Если вы уверены что нужно удалить ветвь (используя git branch -D имяВетки ) которая еще не полностью объединена, вам нужно сделать несколько дополнительных действий чтобы привести в порядок необъединенные коммиты.
Есть ряд случаев когда ветвь рекомендуется сохранить. Например, если это ветка новых возможностей (новых фич), то возможно вы захотите делать правки этой возможности (фичи) внутри объединенной ветки.
Как удалить ветку в Git
Git – популярная система контроля версий и необходимый инструмент в арсенале любого разработчика.
Ветки – неотъемлемая часть работы с Git. В этой статье вы узнаете, как их можно удалять.
Что такое ветки в Git?
Ветка – это снапшот проекта и всех его изменений с определённого момента времени.
При работе над большим проектом главный репозиторий со всем кодом часто называют main или master .
Ветвление позволяет создавать новые независимые версии рабочего исходного кода. Ветки можно создавать, чтобы внести изменения, добавить новые функции или написать тест для исправления бага. Новая ветка позволяет делать это без вмешательства в основной код.
Итак, подведем итог: ветки позволяют вносить изменения в кодовую базу, не затрагивая основной код, до тех пор, пока вы не будете готовы включить эти изменения в проект.
Это поможет вам хранить свою кодовую базу в чистоте и порядке.
От редакции Techrocks. Не всегда для работы над отдельными фичами создаются отдельные ветки. На эту тему можно почитать статью «Что такое Trunk Based Development (TBD)?»
Зачем удалять ветки в Git?
Итак, вы создали ветку, чтобы работать в ней над какими-то изменениями. Затем вы слили свои изменения в исходную версию проекта.
Это значит, что вам больше не нужна ветка, в которой вы работали над изменениями. Удалить ее будет хорошим тоном: таким образом она не будет мешаться в вашем коде.
Как удалить локальную ветку в Git
Локальные ветки – это ветки на вашем компьютере, которые не влияют на ветки удаленного репозитория.
Команда для удаления локальной ветки в Git:
git branch -d local_branch_name
- git branch – команда для удаления локальной ветки.
- -d – флаг, опция команды git branch , сокращенный вариант записи —delete . Как и следует из названия, предназначен для удаления ветки.
- local_branch_name – имя удаляемой ветки.
Давайте рассмотрим это подробнее на примере.
Следующая команда позволяет вывести список всех локальных веток:
git branch
У меня две ветки: master и test2 . Сейчас я нахожусь на test2 , на что указывает значок (*) :
Я хочу удалить ветку test2 . Но удалить ветку, в которой вы находитесь и которую просматриваете в данный момент, нельзя.
Если мы попытаемся это сделать, то получим примерно такую ошибку:
Так что перед удалением локальной ветки обязательно переключитесь на другую, которую не собираетесь удалять.
Переход делается при помощи команды git checkout :
git checkout branch_name # branch_name – имя ветки, на которую нужно перейти # в моём случае альтернативная ветка – master, поэтому я сделаю так: # git checkout master
Теперь можно удалять ветку:
Для удаления ветки мы использовали команду git branch -d . Но она работает не во всех случаях.
Если в ветке присутствуют несмерженные изменения или незапушенные коммиты, флаг -d не позволит удалить такую локальную ветку.
Это связано с тем, что эти коммиты нигде более не отслеживаются, и Git защищает вас от случайной потери этих данных.
Если все же попытаться удалить такую ветку, Git выдаст ошибку:
Как предложено в тексте ошибки, вы должны воспользоваться флагом -D :
git branch -D local_branch_name
Флаг -D с большой D (сокращенная запись опции —delete —force ), принудительно удаляет локальную ветку, вне зависимости от ее статуса мержа.
Используйте данную команду с осторожностью: после её ввода у вас не будут просить подтверждение удаления. Прибегайте к ней только когда абсолютно уверены, что хотите удалить локальную ветку.
Если вы не объединили её с другой локальной веткой или не запушили изменения в удаленный репозиторий, вы рискуете потерять все произведённые изменения.
Как удалить ветку в удалённом репозитории Git
Удалённые ветки существуют отдельно от локальных.
Это ветки в репозиториях на удалённых серверах, к которым мы имеем доступ. В этом заключается их отличие от локальных: последние находятся лишь у нас системе.
Команда удаления (прости Господи) удалённой ветки:
git push remote_name -d remote_branch_name
- Вместо команды git branch , которая используется для локальных веток, удалить ветку в удалённом репозитории можно командой git push .
- Затем указывается имя удалённого репозитория, в большинстве случаев это origin .
- -d – флаг для удаления, сокращённый вариант опции —delete .
- remote_branch_name – имя удаляемой ветки.
Рассмотрим пример того, как можно удалить ветку в origin.
Чтобы увидеть все удалённые ветки, используйте эту команду:
git branch -a
Благодаря флагу -a (сокращенная запись опции —all ) показываются все ветки: и удалённые, и локальные.
У меня созданы две локальные ветки ( master и test ) и две удалённые ( origin / master и origin / test ).
Флаг -r ( сокращенная запись опции —remotes ) позволяет вывести только удалённые репозитории.
Я хочу удалить ветку origin/test , поэтому я воспользуюсь следующей командой:
git push origin -d test
Мы стёрли ветку test в удалённом репозитории origin . Поэтому origin/test больше нет:
Заключение
Теперь вы знаете, как избавляться от локальных и удалённых веток в Git. Спасибо за внимание и удачи!