Вопрос: Как удалить ветвь Git как локально, так и удаленно?


Я хочу удалить ветку как локально, так и удаленную вилку проекта 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?


13541


источник


Ответы:


Управляющее резюме

$ git push -d <remote_name> <branch_name>
$ git branch -d <branch_name>

Обратите внимание, что в большинстве случаев удаленное имя origin,

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

Чтобы удалить местный ветвь используйте одно из следующего:

$ git branch -d branch_name
$ git branch -D branch_name

Заметка: -doption является псевдонимом для --delete, который удаляет ветвь только в том случае, если она уже полностью объединена в своей ветке вверх по течению. Вы также можете использовать -D, который является псевдонимом для --delete --force, который удаляет ветвь «независимо от ее объединенного статуса». [Источник: man git-branch]

Удалить удаленную ветвь [Обновлено 8-Sep-2017]

Начиная с Git v1.7.0 , вы можете удалить дистанционный пульт использование ветви

$ git push <remote_name> --delete <branch_name>

которые легче запомнить, чем

$ git push <remote_name> :<branch_name>

который был добавлен в Git v1.5.0 msgstr "удалить удаленную ветку или тег."

Начиная с Git v2.8.0 вы также можете использовать git pushс -dв качестве псевдонима для --delete,

Поэтому версия Git, которую вы установили, будет определять, нужно ли вам использовать более простой или сложный синтаксис.

Удалить удаленную ветвь [Исходный ответ от 5 января 2010 года]

Из главы 3 Pro Git Скотт Чакон:

Удаление удаленных филиалов

Предположим, что вы закончили работу с удаленной веткой - скажем, вы и ваши сотрудники закончили функцию и объединили ее в ведущую ветвь вашего пула (или какую бы ветку у вас ни была стабильная кодовая линия). Вы можете удалить удаленную ветку, используя довольно тупой синтаксис git push [remotename] :[branch], Если вы хотите удалить ветвь serverfix с сервера, вы запустите следующее:

$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
 - [deleted]         serverfix

Boom. На вашем сервере больше нет ветки. Вы можете захотеть получить эту страницу, потому что вам понадобится эта команда, и вы, вероятно, забудете синтаксис. Способ запоминания этой команды - это вызов git push [remotename] [localbranch]:[remotebranch]синтаксис, который мы перешли немного раньше. Если вы оставите [localbranch]часть, то вы в основном говорите: «Не принимайте ничего на моей стороне и делайте это [remotebranch]«.

Я издал git push origin :bugfixи он работал красиво. Скотт Чакон был прав - я хочу ухо собаки эту страницу (или фактически уха собаки, ответив на это переполнение стека).

Затем вы должны выполнить это на других машинах

git fetch --all --prune

для распространения изменений.


16785



Ответ Мэтью отлично подходит для удаления дистанционный пульт и я также благодарен за объяснение, но простую разницу между двумя командами:

Чтобы удалить местное отделение от вашей машины:

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


2827



Краткие ответы

Если вы хотите получить более подробные объяснения следующих команд, см. Длинные ответы в следующем разделе.

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

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 разных филиала :

  1. Местный филиал X,
  2. Удаленная ветвь происхождения X,
  3. Локальная ветвь удаленного отслеживания origin/Xкоторый отслеживает удаленную ветвь X,

Visualization of 3 branches

Оригинальный плакат

git branch -rd origin/bugfix

который только удалил его локальная ветвь удаленного отслеживания origin/bugfix, а не фактическая удаленная ветвь bugfixна origin,

Diagram 2

Чтобы удалить эту удаленную ветвь , тебе нужно

git push origin --delete bugfix

Diagram 3

дополнительные детали

В следующих разделах описываются дополнительные сведения, которые следует учитывать при удалении удаленных и удаленных отслеживающих ветвей.

Нажатие для удаления удаленных филиалов также удаляет ветви удаленного отслеживания

Обратите внимание, что удаление удаленной ветви 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

Если вы не удалили удаленную ветку 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   удаленная чернослив "меньше необходимости (нет плана для удаления" удаленных   обновление "или" удаленная обрезка ", хотя).

Альтернативная автоматическая обрезка для устаревших ветвей удаленного отслеживания

В качестве альтернативы вместо обрезания устаревших локальных ветвей удаленного отслеживания через git fetch -p, вы можете избежать дополнительной работы в сети просто вручную удалив ветвь (ы) с помощью --remoteили -rфлаги:

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

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


1618



Шаги по удалению ветки:

для удаления удаленная ветка:

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 a remote and local branch in git


869



You can also use the following to delete the remote branch.

git push --delete origin serverfix

Which does the same thing as

git push origin :serverfix

but it may be easier to remember.


690



If you want to delete a branch, first checkout to the branch other than the branch to be deleted.

git checkout other_than_branch_to_be_deleted

Deleting the local branch:

git branch -D branch_to_be_deleted

Deleting the remote branch:

git push origin --delete branch_to_be_deleted

340



Tip: When you delete branches using

git branch -d <branchname>    # deletes local branch

or

git push origin :<branchname> # deletes remote branch

only the references are deleted. Even though the branch is actually removed on the remote the references to it still exists in the local repositories of your team members. This means that for other team members the deleted branches are still visible when they do a git branch -a.

To solve this your team members can prune the deleted branches with

git remote prune <repository>

This is typically git remote prune origin.


326



git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

246



This is simple: Just run the following command:

To delete a Git branch both locally and remotely, first delete the local branch using command:

git branch -d example

(here example is the branch name)

And after that delete remote branch using command:

git push origin :example

210



Another approach is

git push --prune origin

WARNING: This will delete all remote branches that do not exist locally. Or more comprehensively,

git push --mirror

will effectively make the remote repository look like the local copy of the repository (local heads, remotes and tags are mirrored on remote).


177



I use the following in my Bash settings:

alias git-shoot="git push origin --delete"

Then you can call:

git-shoot branchname

148