Я хочу удалить ветвь как локально, так и в моей удаленной проектной вилке на GitHub.
$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.
$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.
$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).
$ git push
Everything up-to-date
$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> origin/bugfix
Already up-to-date.
Что мне нужно сделать по-другому, чтобы успешно удалить
remotes/origin/bugfix
как локально, так и на GitHub?
$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>
Обратите внимание, что в большинстве случаев удаленное имя является origin
.
Чтобы удалить локальную ветку, используйте одно из следующих:
$ git branch -d branch_name
$ git branch -D branch_name
Примечание. Параметр -d
является псевдонимом для --delete
, который удаляет ветвь только в том случае, если она уже полностью объединена с вышестоящей ветвью. Вы также можете использовать -d
, который является псевдонимом для --delete --force
, который удаляет ветку "независимо от ее объединенного статуса". [Источник: man git-branch
]
Начиная с Git v1.7.0, вы можете удалить удаленную ветку, используя
$ git push <remote_name> --delete <branch_name>
что может быть легче запомнить, чем
$ git push <remote_name> :<branch_name>
который был добавлен в Git v1.5.0 "для удаления удаленной ветки или тега".
Начиная с Git v2.8.0 вы также можете использовать git push
с -d
в качестве псевдонима для --delete
.
Таким образом, версия Git, которую вы установили, будет определять, нужно ли вам использовать более простой или сложный синтаксис.
Из главы 3 Pro Git Скотта Чакона:
Удаление удаленных веток
Предположим, что вы закончили с удаленной веткой - скажем, вы и ваши соавторы закончили с функцией и объединили ее с вашей главной веткой удаленных (или любой другой веткой, в которой находится ваша стабильная строка кода). Вы можете удалить удаленную ветку, используя довольно тупой синтаксис
git push [remotename] :[branch]
. Если вы хотите удалить ветку исправления сервера с сервера, выполните следующее:$ git push origin :serverfix To [email protected]:schacon/simplegit.git - [deleted] serverfix
Boom. Нет больше ветки на вашем сервере. Возможно, вы захотите просмотреть эту страницу, потому что вам понадобится эта команда, и вы, скорее всего, забудете синтаксис. Чтобы запомнить эту команду,
git push [remotename] [localbranch]:[remotebranch]
синтаксисgit push [remotename] [localbranch]:[remotebranch]
который мы рассмотрели чуть ранее. Если вы[localbranch]
часть[localbranch]
, то в основном говорите: "Ничего не бери на моей стороне и сделай его[remotebranch]
".
Я выпустил git push origin :bugfix
и он работал прекрасно. Скотт Чакон был прав - я захочу выслушать эту страницу (или, фактически, собачье ухо, ответив на это в Переполнении стека).
Затем вы должны выполнить это на других машинах
git fetch --all --prune
распространять изменения.
git push origin local_branch:remote_branch
, то синтаксис для удаления ветки с git push origin :remote_branch
довольно симпатичен. Есть пустота перед :
git fetch --all --prune
на других компьютерах после удаления удаленной ветви на сервере. ||| После удаления локальной ветки с помощью git branch -d
и удаления удаленной ветки с помощью git push origin --delete
других машинах могут git push origin --delete
«устаревшие ветви отслеживания» (чтобы увидеть, как они выполняют git branch -a
). Чтобы избавиться от них, сделайте git fetch --all --prune
.
Ответ Matthew отлично подходит для удаления удаленных ветвей, и я также благодарен за объяснение, но для простого различия между двумя командами:
Чтобы удалить локальную ветвь с вашего устройства:
git branch -d {the_local_branch}
(используйте -D
вместо того, чтобы принудительно удалить ветвь без проверки объединенного состояния)
Чтобы удалить сервер удаленную ветвь с сервера:
git push origin --delete {the_remote_branch}
Ссылка: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote
-D
force удаляет, -d
выдает предупреждение, если оно еще не слито.
'git branch -d your_branch
то вы увидите ошибку, похожую на error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
Если вы хотите получить более подробные объяснения следующих команд, см. длинные ответы в следующем разделе.
Удаление удаленной ветки:
git push origin --delete <branch> # Git version 1.7.0 or newer
git push origin :<branch> # Git versions older than 1.7.0
Удаление локальной ветки:
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches
Удаление локальной ветки удаленного отслеживания:
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p # Shorter
Когда вы имеете дело с удалением ветвей как локально, так и удаленно, имейте в виду, что задействованы 3 разных ветки:
X
.X
.origin/X
, которая отслеживает удаленную ветвь X
.
Оригинальный плакат, используемый
git branch -rd origin/bugfix
который удалил только локальную ветвь удаленного отслеживания origin/bugfix
, а не фактическую удаленную ветвь bugfix
на origin
.
Чтобы удалить текущую удаленную ветвь, вам нужно
git push origin --delete bugfix
В следующих разделах описываются дополнительные сведения, которые следует учитывать при удалении ветвей удаленного и удаленного отслеживания.
Обратите внимание, что удаление удаленной ветки X
из командной строки с помощью git push
также удалит локальную ветвь удаленного отслеживания origin/X
, поэтому нет необходимости обрезать устаревшее ветвь удаленного отслеживания с git fetch --prune
или git fetch -p
, хотя это не повредит, если вы все равно это сделаете.
Вы можете проверить, что ветвь удаленного отслеживания origin/X
также была удалена, выполнив следующее:
# 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
Если вы не удалили удаленную ветвь X
из командной строки (например, выше), то ваше местное репо все равно будет содержать (теперь устаревшую) ветку удаленного отслеживания origin/X
. Это может произойти, если вы удалили удаленную ветку непосредственно через веб-интерфейс GitHub, например.
Типичный способ удаления этих устаревших ветвей удаленного отслеживания (начиная с Git версии 1.6.6) - просто запустить git fetch
с --prune
или короче -p
. Обратите внимание, что это удаляет все устаревшие локальные ветки удаленного отслеживания для любых удаленных веток, которые больше не существуют на удаленном:
git fetch origin --prune
git fetch origin -p # Shorter
Вот соответствующая цитата из 1.6.6 примечания к выпуску (внимание мое):
"git fetch" узнал
--all
и--multiple
параметры, чтобы запустить выборку из много репозиториев и--prune
для удаления удаленного отслеживания ветки, которые стали устаревшими. Они делают "git удаленное обновление" и "gitудаленная чернослив" меньше необходимости (нет плана для удаления "удаленных обновление" или "удаленная обрезка" ).
В качестве альтернативы вместо обрезания устаревших локальных ветвей удаленного отслеживания через git fetch -p
вы можете избежать дополнительной работы в сети, просто удалив ветвь (ветки) с помощью флагов --remote
или -r
:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
X
и origin/X
в локальном клоне (2 ветви), а затем X
на удаленном (делающем 3 ветви).
для удаления удаленной ветки:
git push origin --delete <your_branch>
Для удаления локальной ветки у вас есть три способа:
1: git branch -D <branch_name>
2: git branch --delete --force <branch_name> //same as -D
3: git branch --delete <branch_name> //error on unmerge
Объясните: хорошо, просто объясните, что здесь происходит!
Просто выполните git push origin --delete
чтобы удалить ТОЛЬКО удаленную ветвь, добавьте имя ветки в конце, и это одновременно удалит и отправит ее на удаленную ветку...
Также, git branch -D
, который просто удаляет ТОЛЬКО локальную ветку!...
-D
обозначает --delete --force
которая удаляет ветку, даже если она не объединена (принудительное удаление), но вы также можете использовать -D
что обозначает --delete
которая --delete
ошибку, соответствующую состоянию слияния ветки...
Я также создаю изображение ниже, чтобы показать шаги:
git branch -a
отобразит локальные и удаленные ветки. Это поможет вам представить схему.
Вы также можете использовать следующее, чтобы удалить удаленную ветку
git push --delete origin serverfix
Который делает то же самое, что и
git push origin :serverfix
но это может быть легче запомнить.
git branch -d <local_branch>
или git branch -D <local_branch>
для принудительного удаления
Если вы хотите удалить ветвь, сначала выйдите в ветку, отличную от ветки, которую нужно удалить.
git checkout other_than_branch_to_be_deleted
Удаление локальной ветки:
git branch -D branch_to_be_deleted
Удаление удаленной ветки:
git push origin --delete branch_to_be_deleted
Совет: при удалении веток с помощью
git branch -d <branchname> # deletes local branch
или же
git push origin :<branchname> # deletes remote branch
удаляются только ссылки. Несмотря на то, что ветка на самом деле удалена, ссылки на нее все еще существуют в локальных репозиториях членов вашей команды. Это означает, что для других членов команды удаленные ветки все еще видны, когда они делают git branch -a
.
Чтобы решить эту проблему, члены вашей команды могут удалить удаленные ветки с помощью
git remote prune <repository>
Обычно это git remote prune origin
.
git push
удаляет локальную ветвь и удаленную ветвь.
git remote prune
- это несколько устаревший способ удаления устаревших веток удаленного отслеживания, более новый способ сделать это - использовать git fetch --prune
или git fetch -p
.
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
-D
заставляет удаление. Всегда лучше использовать -d
, который будет напоминать, если вам нужно сделать что-то опасное.
Это просто: просто запустите следующую команду:
Чтобы удалить ветвь Git как локально, так и удаленно, сначала удалите локальную ветку с помощью команды:
git branch -d example
(здесь example
- имя ветки)
И после этого удалите удаленную ветку с помощью команды:
git push origin :example
Другой подход:
git push --prune origin
ВНИМАНИЕ: Это удалит все удаленные ветки, которые не существуют локально. Или более всесторонне,
git push --mirror
эффективно сделает удаленный репозиторий похожим на локальную копию репозитория (локальные заголовки, пульты и теги отражаются на удаленном).
Я использую следующее в моих настройках Bash:
alias git-shoot="git push origin --delete"
Тогда вы можете позвонить:
git-shoot branchname
С января 2013 года GitHub включал кнопку Delete branch рядом с каждой веткой на странице "Ветви".
Соответствующее сообщение в блоге: создание и удаление веток
Если вы хотите выполнить оба этих действия с помощью одной команды, вы можете сделать для нее псевдоним, добавив ниже к вашему ~/.gitconfig
:
[alias]
rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"
В качестве альтернативы вы можете добавить это в свою глобальную конфигурацию из командной строки, используя
git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'
ПРИМЕЧАНИЕ. При использовании -d
(нижний регистр d) ветвь будет удалена только в том случае, если она была объединена. Чтобы принудительно выполнить удаление, вам нужно будет использовать -d
(в верхнем регистре D).
&&
на ;
так что даже если первая команда не будет выполнена, вторая все равно будет выполняться (иногда существует только локальная или только удаленная).
Чтобы удалить филиал локально и удаленно
Оформить покупку в ветке - git checkout master
Удалите удаленную ветку - git push origin --delete <branch-name>
Удалите локальную ветку - git branch --delete <branch-name>
Удалить локально:
Чтобы удалить локальную ветку, вы можете использовать:
git branch -d <branch_name>
Чтобы принудительно удалить ветку, используйте -D
вместо -D
.
git branch -D <branch_name>
Удалить удаленно:
Есть два варианта:
git push origin :branchname
git push origin --delete branchname
Я бы предложил вам использовать 2-й способ, так как он более интуитивно понятен.
Вы также можете сделать это, используя git remote prune origin
$ git remote prune origin
Pruning origin
URL: [email protected]/yourrepo.git
* [pruned] origin/some-branchs
Он удаляет и удаляет ветки удаленного отслеживания из списка git branch -r
.
В дополнение к другим ответам я часто использую инструмент git_remote_branch. Это дополнительная установка, но она дает вам удобный способ взаимодействия с удаленными веткими. В этом случае удалить:
grb delete branch
Я нахожу, что я также часто использую команды publish
и track
Предположим, что наша работа над веткой "контакт-форма" выполнена, и мы уже интегрировали ее в "мастер". Поскольку нам это больше не нужно, мы можем удалить его (локально):
$ git branch -d contact-form
И для удаления удаленной ветки:
git push origin --delete contact-form
Просто скажите:
git branch -d <branch-name>
git push origin :<branch-name>
Удалить удаленную ветвь
git push origin :<branchname>
Удалить локальную ветвь
git branch -D <branchname>
Удалить шаги локального перехода:
git push origin :<branchname>
уже отправляет «пустую» ветку на удаленную (следовательно, удаляет удаленную ветку)
Одна команда liner удаляет как локальные, так и удаленные:
D=branch-name; git branch -D $D; git push origin :$D
или добавьте псевдоним ниже в ~/.gitconfig; использование: git kill branch-name
[alias]
kill = "!f(){ git branch -D \"$1\"; git push origin --delete \"$1\"; };f"
git branch -D
в скрипте, так как он принудительно удаляет ветку без проверки того, что она была объединена. Используйте -d
чтобы быть в безопасности.
Теперь вы можете сделать это с помощью приложения GitHub Desktop.
После запуска приложения
git push origin --delete <branch Name>
легче запомнить, чем
git push origin :branchName
Чтобы удалить локально - (Обычный),
git branch -d my_branch
Если ваша ветка в процессе восстановления/слияния и что это не было сделано правильно, вы получите сообщение об ошибке Rebase/Merge in progress
, поэтому в этом случае вы не сможете удалить свою ветку.
Таким образом, либо ваша необходимость разрешать переполнение/слияние в противном случае вы можете принудительно удалить, используя
git branch -d my_branch
Чтобы удалить в Remote:
git push --delete origin my_branch
может использовать то же самое,
git push origin :my_branch # easy to remember both will do the same.
Графическое представление
Это не будет работать, если у вас есть тег с тем же именем, что и ветка на пульте:
$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to '[email protected]:SomeName/some-repo.git'
В этом случае вам нужно указать, что вы хотите удалить ветку, а не тег:
git push origin :refs/heads/branch-or-tag-name
Точно так же, чтобы удалить тег вместо ветки, вы должны использовать:
git push origin :refs/tags/branch-or-tag-name
Мне досадно было заглянуть за этот ответ, поэтому я сделал аналогичный подход на ответ, который ранее опубликовал crizCraig
В мой профиль Bash добавлено следующее:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
Затем каждый раз, когда я делаю это с веткой (например, слияние в master
), я запускаю в моем терминале следующее:
gitdelete my-branch-name
... который затем удаляет my-branch-name
из origin
как локально.
--delete "$@"
об этом - --delete "$@"
и -D "$@"
вместо $1
будут обрабатывать это для нескольких ветвей.
git branch -d
(с нижним регистром 'd'), чтобы убедиться, что изменения были объединены, а затем нажать push в случае успеха (вставьте &&
между командами)
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
Если вы уверены, что хотите его удалить, запустите
git branch -D bugfix
Теперь очистка удаленных удаленных ветвей выполняется
git remote prune origin
Многие другие ответы приведут к ошибкам/предупреждениям. Этот подход является относительно git branch -D branch_to_delete
хотя вам все еще может понадобиться git branch -D branch_to_delete
если он не полностью слит, например, в some_other_branch
.
git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete
Удаленное удаление не требуется, если вы удалили удаленную ветку. Он использовался только для получения самых современных пультов дистанционного управления, доступных в отслеживаемом вами хранилище. Я заметил, что git fetch
добавит пульты, а не удалит их. Вот пример того, когда git remote prune origin
действительно что-то сделает:
Пользователь А выполняет шаги, описанные выше. Пользователь B будет запускать следующие команды, чтобы увидеть самые последние удаленные ветки
git fetch
git remote prune origin
git branch -r
Перед выполнением
git branch --delete <branch>
убедитесь, что вы сначала определили, что такое EXACT имя удаленной ветки, выполнив:
git ls-remote
Это скажет вам, что вводить ТОЧНО для значения <branch>
. (branch
чувствителен к регистру!)
Mashup всех других ответов. Требуется Ruby 1.9.3+
, протестировано только на OS X.
Назовите этот файл git-remove
, сделайте его исполняемым и поместите его по своему пути. Затем используйте, например, git remove temp
.
#!/usr/bin/env ruby
require 'io/console'
if __FILE__ == $0
branch_name = ARGV[0] if (ARGV[0])
print "Press Y to force delete local and remote branch #{branch_name}..."
response = STDIN.getch
if ['Y', 'y', 'yes'].include?(response)
puts "\nContinuing."
'git branch -D #{branch_name}'
'git branch -D -r origin/#{branch_name}'
'git push origin --delete #{branch_name}'
else
puts "\nQuitting."
end
end
Я добавил следующие псевдонимы в мой файл .gitconfig
. Это позволяет мне удалять ветки с указанием имени ветки или без нее. Имя ветки по умолчанию совпадает с текущей веткой, если аргумент не передан.
[alias]
branch-name = rev-parse --abbrev-ref HEAD
rm-remote-branch = !"f() { branch=${1-$(git branch-name)}; git push origin :$branch; }; f"
rm-local-branch = !"f() { branch=${1-$(git branch-name)}; git checkout master; git branch -d $branch; }; f"
rm-branch-fully = !"f() { branch=${1-$(git branch-name)}; git rm-local-branch $branch; git rm-remote-branch $branch; }; f"
-D
. В пакете рассмотрите использование более низкого -d
-d
потребуется ветвь быть объединена перед удалением, используя -D
силы удаления ветви.
Альтернативным вариантом командной строки для удаления удаленных веток является страница GitHub branch.
См. например: https://github.com/angular/angular.js/branches
Найдено на странице Code
→ Branches
репозитория GitHub.
Я обычно предпочитаю командную строку, но эта страница GitHub показывает вам больше информации о ветвях, таких как последняя обновленная дата и пользователь, а количество берет вперед и отстает. Это полезно при работе с большим количеством ветвей.
У меня также были подобные проблемы, и это, похоже, работает:
Это удаляет локальную ветвь.
git branch -d the_local_branch
Удаление удаленной ветки
git push origin :the_remote_branch
Есть хороший ответ, но в случае, если у вас есть тонна ветвей, удаление их по одному локально и удаленно было бы утомительными задачами. Вы можете использовать этот script для автоматизации этих задач.
branch_not_delete=( "master" "develop" "our-branch-1" "our-branch-2")
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do
# delete prefix remotes/origin/ from branch name
branch_name="$(awk '{gsub("remotes/origin/", "");print}' <<< $branch)"
if ! [[ " ${branch_not_delete[*]} " == *" $branch_name "* ]]; then
# delete branch remotly and locally
git push origin :$branch_name
fi
done
Источник: removing-git-branches-at-once
Используя GitBash, вы можете выполнить следующее:
git branch --delete <branch>
Из рабочего стола GitHub, когда вы проверили ответвление, вы можете удалить ветвь Локальная через полосу меню ветки:
Если вы используете ARE NOT с помощью рабочего стола GitHub и используете IDE, например Visual Studio для вашего локального элемента управления, все, что вам нужно сделать, это сделать несколько быстрых шагов:
Затем, после входа в свою учетную запись GitHub в Интернете, перейдите в репозиторий и перейдите на вкладку Все ветки. Оттуда просто щелкните значок маленькой корзины справа от имени брака, который вы хотите удалить.
* Имейте в виду - если ветка не опубликована, нет необходимости пытаться удалить ее из своего онлайн-репозитория.
Overview
, « Yours
, « Active
, « State
и « All branches
» на веб-сайте GitHub. Похоже, это старый снимок. На вкладке « Code
отображаются вложенные вкладки, такие как коммиты, ветки, релизы и участники. Когда я являюсь владельцем репозитория, я вижу дополнительную вкладку с именем MIT.
git branch --delete <branch>
не удаляет удаленную ветку, для этого вам нужно git push <server> --delete <branch>
В соответствии с последним документом, использующим терминал, мы можем удалить следующий путь.
удалить локально:
git branch -D usermanagement
удалить в удаленном месте:
git push --delete origin usermanagement
Я создал следующую удобную функцию в файле.bash_aliases:
git-delete-branch()
{
if [[ -n $1 ]]; then
git checkout master > /dev/null;
branch_name="$1";
echo "Deleting local $branch_name branch...";
git branch -D "$branch_name";
echo "Deleting remote $branch_name branch...";
git push origin --delete "$branch_name";
git remote prune origin;
echo "Your current branches are:";
git branch -a;
else
echo "Usage: git-delete-branch <branch_name>";
fi
}
Его очень простая
Удаление удаленной ветки
git push -d origin <branch-name>
ИЛИ
git push origin :<branch-name>
Чтобы удалить локальную ветвь
git branch -D <branch-name>
--delete
вместо -d
чтобы удалить удаленную ветку.
-d
является псевдонимом для --delete
и если --delete
работает, то -d
также должен работать, если вы хотите удалить ветку, вы можете использовать -D
вместо -d
или --delete
.
Я использую следующие настройки в Bash:
alias git-shoot="git push origin --delete"
Затем вы можете позвонить:
git-shoot branchname
Эти команды работают лучше всего для меня:
git branch -D <branch name>
deleted remote-tracking branch
»: см. Github.com/git/git/commit/…