Как удалить имена удаленных веток из автозаполнения?

120

Раньше git branch -d myBranchудалял ветку. Однако, когда я нахожусь в мастере и пытаюсь оформить новую ветку с git checkout, myBranchвсе еще появляется во вкладке автозаполнения.

Как мне удалить имя myBranchиз tab-autocomplete для git checkout?

Джон Хоффман
источник
10
Все git branch -aеще перечислено либо myBranchили origin/myBranch? Обратите внимание, что, даже если myBranchон не существует, git checkout myBranchпо-прежнему является допустимым ярлыком, git checkout -b myBranch origin/myBranchесли origin/myBranchсуществует.
twalberg
2
@twalberg стоит опубликовать в качестве ответа.
cmbuckley

Ответы:

81

Одна из возможных причин этого заключается в том, что, если удаленная ветка (например origin/myBranch) все еще существует, она git checkout myBranchбудет успешной в качестве альтернативы git checkout -b myBranch origin/myBranch. Это предназначено для удобства общего случая первой проверки удаленной ветви, создавая локальную ветвь отслеживания с идентичным именем.

Есть и другие возможности, в зависимости от того, что именно вы используете для завершения, но это одна из первых вещей, которые я проверю. Если вы запустите git branch -a, и есть origin/myBranchсписок (или один для удаленного, кроме origin, если он у вас есть), то это вероятный виновник.

twalberg
источник
2
Спасибо! Похоже, в этом виноват. origin/myBranchвсе еще существует. Если я удалю myBranchветку на Github (через онлайн-интерфейс), безопасно ли мне позвонить, git branch -d origin/myBranchчтобы удалить эту удаленную ветку?
John Hoffman
99
@JohnHoffman Это должно быть безопасно, но я думаю, что лучше будет git fetch --prune origin. Это очистит все локальные ветки отслеживания, которые больше не существуют на удаленном компьютере.
twalberg
3
@twalberg Я не верю, что простого удаления локальной и удаленной веток достаточно, чтобы избавиться от всех старых веток в автозаполнении. Я считаю, что вам нужно, чтобы git fetch --prune originлокальные ссылки на удаленные ветки исчезли при автозаполнении. Было бы неплохо переместить это из комментария в ответ. В любом случае спасибо за ваш ответ, так как он мне помог!
timmyl
4
git branch -aповел меня на верный путь; мой коллега предложил git fetch --prune --allобрезать все мертвые ветки со всех пультов, что полезно при работе с большим количеством разработчиков с большим количеством вилок.
ericoco
173

git fetch --prune --all

Публикация этого как собственного ответа, поскольку это однострочное исправление, но если вы проголосуете, обязательно проголосуйте за ответ @ twalberg выше.

Предложение @ twalberg git branch -aпривело меня на верный путь; мой коллега предложил git fetch --prune --allобрезать все мертвые ветки со всех пультов, что полезно при работе с большим количеством разработчиков с большим количеством вилок.

ericsoco
источник
19
Хотя принятый ответ дает хорошее объяснение, почему это происходит, этот ответ представляет собой реальное решение проблемы и, следовательно, должен быть принят ИМХО.
Патрик Оссити,
3
Имена мертвых веток по-прежнему отображаются в автозаполнении.
Фицю