Инструкция git для удаления ветки night

Удаление локальной ветки

Чтобы удалить локальную ветку в Git нужно выполнить команду (вместо mybranch необходимо поставить название ветки, которую вы хотите удалить):

git branch -d mybranch

Обратите внимание на то, что ветка, которую вы удаляете, не должна быть вашей текущей веткой, в которой вы работаете, иначе отобразится ошибка вида:
error: Cannot delete branch ’mybranch’ checked out at ’/path/to
Поэтому, если вам нужно удалить текущую ветку, то сначала нужно переключиться на какую-либо другую ветку, а только потом выполнять удаление.

Если вдруг возникает ошибка: The branch ’mybranch’ is not fully merged. If you are sure you want to delete it и вы по прежнему хотите удалить ветку, то для принудительного удаления ветки можно воспользоваться опцией -D:

git branch -D mybranch

Удаление удаленной ветки

Чтобы удалить удаленную (remote) ветку используется команда (вместо origin и mybranch необходимо поставить свои данные):

git push origin --delete mybranch

Вместо —delete можно просто писать -d:

git push origin -d mybranch

Смотрите также:

  • Как изменить файлы в старом коммите (не последнем)
  • Как добавить все файлы в коммит, кроме одного
  • Как создать ветку из предыдущего коммита
  • Команда Git stash. Как прятать изменения в 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

It is common for a git repo to have different branches. They are a good way to work on different features and fixes while isolating the new code from the main codebase. Repos often have a master branch or a main branch for the main codebase and developers create other branches with names of their choice (or as required by the organization) to work on different features or fixes.  Most of the time you might have to delete a git branch, because of some irreversible changes, security issues, or when a particular feature of the related project has been built. In most cases, it is simple to delete a git branch. In this article, I’ll guide you through the entire process of how to delete a git branch securely. To get started I have already created a new branch in my repo using:

git checkout -b <branch-name> 

Here <branch-name> is test. To check which is the current working branch you can use the git branch command.

we can see that we are in the test branch

and the following is a snapshot of my Github repository with the test branch in the remote.

Delete a Branch Locally 

Git won’t allow you to delete the branch you are currently working on. So you must make sure to checkout to a branch that you are NOT deleting. For this use the command:

git checkout <branch-name>

Here we will check out our main branch from my test branch.

Now in order to delete the test branch locally, we use the command :

git branch -d <branch-name>

We will delete my test branch as an example.

Note: The -d option will delete the branch only if it has already been pushed and merged with the remote branch. If you want to forcefully delete a branch you will have to use the -D option instead. The -D flag is synonymous with –delete –force. This will forcefully delete the branch even if it hasn’t been pushed or merged with the remote. the full command is:

git branch -D <branch-name>

With this, we can successfully delete a local branch.

Delete a Branch Remotely

You can’t use the git branch command to delete a remote branch. Instead, you have to use the git push command with the –delete flag, followed by the name of the branch that we want to delete. You also need to specify the remote name (origin in this case) after “git push”. The command is as follows:

git push <remote-name> --delete <branch-name>

Here I will delete my test branch in my remote repository as shown below.

This command will delete the branch remotely. You can also use the shorthand:

git push <remote-name> :<branch-name>

As you can see my remote branch is no more in my GitHub repo:

With this, we have successfully deleted our remote branch. A common error faced by many in this step is:

error: unable to push to unqualified destination: remoteBranchName The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to ‘git@repository_name’

This means that someone has already deleted the branch that you want to delete. If this happens you can use the following command to synchronize your branch list in the local environment:

git fetch -p

The -p flag here means “prune”. After fetching the branches which no longer exist in remote will be deleted in your local working environment. 

Last Updated :
23 Jun, 2021

Like Article

Save Article

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. Спасибо за внимание и удачи!

Перевод статьи Git Delete Branch – How to Remove a Local or Remote Branch.

The short answers

If you want more detailed explanations of the following commands, then see the long answers in the next section.

Deleting a remote branch

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 1.7.0 or newer)
git push origin :<branch>          # Git versions older than 1.7.0

Deleting a local branch

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches

Deleting a local remote-tracking branch

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete remote-tracking branches
git fetch <remote> -p      # Shorter

The long answer: there are three different branches to delete!

When you’re dealing with deleting branches both locally and remotely, keep in mind that there are three different branches involved:

  1. The local branch X.
  2. The remote origin branch X.
  3. The local remote-tracking branch origin/X that tracks the remote branch X.

Visualization of three branches

The original poster used:

git branch -rd origin/bugfix

Which only deleted his local remote-tracking branch origin/bugfix, and not the actual remote branch bugfix on origin.

Diagram 2

To delete that actual remote branch, you need

git push origin --delete bugfix

Diagram 3

Additional details

The following sections describe additional details to consider when deleting your remote and remote-tracking branches.

Pushing to delete remote branches also removes remote-tracking branches

Note that deleting the remote branch X from the command line using a git push will also remove the local remote-tracking branch origin/X, so it is not necessary to prune the obsolete remote-tracking branch with git fetch --prune or git fetch -p. However, it wouldn’t hurt if you did it anyway.

You can verify that the remote-tracking branch origin/X was also deleted by running the following:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

Pruning the obsolete local remote-tracking branch origin/X

If you didn’t delete your remote branch X from the command line (like above), then your local repository will still contain (a now obsolete) remote-tracking branch origin/X. This can happen if you deleted a remote branch directly through GitHub’s web interface, for example.

A typical way to remove these obsolete remote-tracking branches (since Git version 1.6.6) is to simply run git fetch with the --prune or shorter -p. Note that this removes all obsolete local remote-tracking branches for any remote branches that no longer exist on the remote:

git fetch origin --prune
git fetch origin -p # Shorter

Here is the relevant quote from the 1.6.6 release notes (emphasis mine):

«git fetch» learned --all and --multiple options, to run fetch from
many repositories, and --prune option to remove remote tracking
branches that went stale.
These make «git remote update» and «git
remote prune» less necessary (there is no plan to remove «remote
update» nor «remote prune», though).

Alternative to above automatic pruning for obsolete remote-tracking branches

Alternatively, instead of pruning your obsolete local remote-tracking branches through git fetch -p, you can avoid making the extra network operation by just manually removing the branch(es) with the --remotes or -r flags:

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

See Also

  • git-branch(1) Manual Page.
  • git-fetch(1) Manual Page.
  • Pro Git § 3.5 Git Branching — Remote Branches.

Понравилась статья? Поделить с друзьями:
  • Инструкция gigabyte ga h77 ds3h
  • Инструкция gerffins g200 как заряжать
  • Инструкция general climate оконный кондиционер general climate gcw 05cmn1
  • Инструкция general climate gcp 09era1n1 инструкция
  • Инструкция gazeco 18 t 1