В короткие ответы
Если вам нужны более подробные объяснения следующих команд, см. Подробные ответы в следующем разделе.
Удаление удаленной ветки
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
Удаление локального филиала
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 remote-tracking branches
git fetch <remote> -p # Shorter
Длинный ответ : есть три различные ветви , чтобы удалить!
Когда вы имеете дело с удалением веток как локально, так и удаленно, имейте в виду, что задействованы три разные ветви :
- Местное отделение
X
.
- Удаленная ветка происхождения
X
.
- Локальная ветвь удаленного отслеживания,
origin/X
которая отслеживает удаленную ветвь X
.
Оригинальный постер использовал:
git branch -rd origin/bugfix
Который только удалил свою локальную ветку удаленного отслеживания origin/bugfix
, а не фактическую удаленную ветку bugfix
на origin
.
Чтобы удалить эту удаленную ветку , вам нужно
git push origin --delete bugfix
Дополнительные детали
В следующих разделах описываются дополнительные детали, которые следует учитывать при удалении веток удаленного и удаленного отслеживания.
Нажатие на удаление удаленных веток также удаляет удаленные ветви отслеживания
Обратите внимание, что удаление удаленной ветви X
из командной строки с помощью a 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
Если вы не удалили свою удаленную ветку 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 remote update» и «git remote prune» менее необходимыми (однако, не планируется удалять ни «remote update», ни «remote prune»).
Альтернатива вышеупомянутому автоматическому сокращению для устаревших удаленных отслеживающих ветвей
В качестве альтернативы, вместо удаления устаревших локальных удаленных веток отслеживания git fetch -p
, вы можете избежать дополнительных сетевых операций , просто удалив ветки вручную с помощью флагов --remote
или -r
:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
Смотрите также