2013-07-29 3 views
61

Я использовал git branch -d myBranch, чтобы удалить ветку. Однако, когда я нахожусь на хозяине и пытаюсь проверить новую ветку с git checkout, myBranch все еще появляется в tab-autocomplete.Как удалить удаленные имена ветвей из автозаполнения?

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

+7

Действительно ли 'git branch -a' все еще перечисляет либо' myBranch', либо 'origin/myBranch'? Обратите внимание, что даже если 'myBranch' не существует,' git checkout myBranch' по-прежнему является допустимым ярлыком для 'git checkout -b myBranch origin/myBranch', если существует' origin/myBranch'. – twalberg

+1

@twalberg стоит опубликовать в качестве ответа. – cmbuckley

ответ

41

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

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

+0

Спасибо! Кажется, это преступник. 'origin/myBranch' все еще существует. Если я удалю ветку 'myBranch' на Github (через онлайн-интерфейс), безопасно ли мне называть' git branch -d origin/myBranch' для удаления этой удаленной ветки? –

+52

@JohnHoffman Это должно быть безопасно, но я думаю, что лучшим способом будет «git fetch --prune origin». Это очистит все локальные ветви отслеживания, которые больше не существуют на пульте дистанционного управления. – twalberg

+0

Спасибо! Это сработало! –

0

Это, вероятно, не делает это, это ваша оболочка, завершающая команду, так как вы ее использовали раньше.

Вы можете посмотреть историю, набрав history или отредактировать ~/.bash_history. Вы можете редактировать свою историю из файла ~/.bash_history, или вы можете ввести history, затем введите номер строки с git checkout myBranch, а затем используйте history -d {line number here}. В крайнем случае вы можете использовать команду history -c, чтобы полностью уничтожить историю.

+2

Нет, это не история истории. Это [автозаполнение git] (http://apple.stackexchange.com/questions/55875/git-auto-complete-for-branches-at-the-commandline). Другой, но очень полезный инструмент. – Arjan

+0

@Arjan Вау, не знал, что это так. Думаю, я предположил, что вкладка просто не работает и никогда не пробовала. Благодаря! –

+0

Тогда Linux сам что-то пишет, вы бы сделали ставку на автозаполнение: 3 – ThorSummoner

68

git fetch --prune --all

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

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

+7

Хотя принятый ответ дает хорошее объяснение, почему это происходит, этот ответ представляет собой фактическое решение проблемы и поэтому должен быть принят ИМХО. –

Смежные вопросы