Удаление удаленных веток в git: понимание этого раз и навсегда

Я действительно схожу с ума по этому поводу. Откровенно говоря, яя не уверен, почему яУ меня проблемы с пониманием, как это должно быть просто, верно? Прежде всего ямы сделали тонны поиска по этому вопросу. Я'Я прочитал кучу вещей на stackoverflow, яЯ читал статьи в блогах, которые были найдены в результате поиска в Google. Однако некоторые детали все еще неясны, несмотря на то, что этот вопрос может показаться дублированным и простым, поэтому я заранее приношу свои извинения людям, которые парят над кнопками «вниз» / «закрыть». Причина, почему яЯ пишу здесь сегодня потому, что поведение, которое я вижу в командной строке, отличается от того, что я на самом деле читаю в Интернете. Так что это смущает меня.

Здесь обсуждаются две команды:

git branch -r -d origin/topic1

а также

git push origin :topic1

Мое понимание до сих пор (хотя я могу быть совершенно неправ, мой мозг зажарен):

Первый должен удалить обе ссылки отслеживанияа также удаленная ветвьВторой должен удалить удаленную ветвь, но НЕ ссылку на отслеживание (если существует локальная ветвь), хотя причина, по которой вы неУдаление ссылки отслеживания кажется мне бессмысленным и вводящим в заблуждение.

Вот недавний сценарий, с которым я столкнулся. Я только что клонировал репозиторий с двумя удаленными ветками:

origin/master
origin/develop

Единственное местное отделение у меня есть:

master

Я хочу удалить удаленную веткуorigin/developтак что смотрите это:

Robert@COMP /c/Code/project (master)
$ git branch -rd origin/develop
Deleted remote branch origin/develop (was 9ff16e8).

Robert@COMP /c/Code/project (master)
$ git fetch
From github.com:username/project
 * [new branch]      develop    -> origin/develop

Как вы можете видеть, я попытался удалить удаленную ветку и немедленно получить последние изменения из источника, но по какой-то причине он заново создал ветку. Я понятия не имею, почему он это сделал, яЯ очень смущен. Я нет местный соответствующий филиал дляorigin/developтак что я неЯ не знаю, почему он это делает.

Я хотел бы знать, почему это произошло, но также (чтобы обратиться к более общему названию этого вопроса и, возможно, чтобы помочь всем остальным переполнить стек для ответов на эти запутанные неясности), я 'Я хотел бы получить более общие ответы на некоторые вопросы:

Есть два способа удалить удаленную ветку. Какой действительно хороший, простой способ запомнить, какой использовать при каких обстоятельствах?Предполагая, что это вообще имеет значение, как существование соответствующей локальной ветви (для удаленной ветви) влияет на решение о том, как удаленная ветвь удаляется?Как существование ссылки / отношения отслеживания между локальной и удаленной ветвью влияет на то, как вы выбираете удаление ветви, и какой из методов удаления ветви также очищает ссылки отслеживания?

Спасибо всем! Пожалуйста, сохрани мои волосы!

РЕДАКТИРОВАТЬ (резюме ответов)

Основываясь на ответах ниже, я смог получить разъяснения по одной части, которая все путала в этом. Документация для-r вариант дляgit branch состояния:

Перечислите или удалите (если используется с -d) ветви удаленного отслеживания.

Путаница для меня была с тем, что считается "Дистанционный пульт", Пульт для меня изначально имел ввиду "происхождение»... что было на "GitHub» в моем случае. Однако в вашем МЕСТНОМ клоне у github есть своя концепция того, что такое пульт, и чтоs его собственная копия удаленных филиалов. Таким образом, в основном кажется, что удаление удаленной ветви включает в себя два этапа: удаление источника 'ветка (этоgit push origin :topic1), а затем удаляя удаленную ветвь отслеживания (git branch -rb origin/topic1).

Это помогает моему пониманию, хотя, потому что слово "дистанционный пульт" здесь есть два значения, поэтому очень сложно сообщать об этом людям, поэтому я надеюсь, что эта поправка к моему вопросу поможет людям в будущем. Спасибо всем, кто ответил и кто будет продолжать вносить свой вклад в этот вопрос в будущем!

Ответы на вопрос(1)

Ваш ответ на вопрос