Git prune не удалял мои локальные ветки - PullRequest
0 голосов
/ 01 марта 2019

Я удалил несколько слитых веток на Github.com, я сделал git pull, и все мои ветви все еще отображаются.

Следовательно, я запустил ..

git remote prune origin

Это показало, что ветви были удалены в выводе.

Однако все мои удаленные ветви отображаются, когда я запускаю

git branch

Я предполагаю, что сделал что-то другое, чем я ожидал?Что я сделал?Как мне удалить мои локальные ветви, которые уже удалены из GitHub?

В этом посте: git origin prune не удаляет локальную ветку, даже если удаленная ветка upstream удалена

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

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Как уже сказал torek , первым ключевым моментом является обрезка веток удаленного отслеживания , чтобы убедиться, что вы сравниваете со свежим списком ссылок.Вы можете использовать

git fetch --prune

, а затем определить локальные «оставшиеся» ветви с помощью:

 git for-each-ref --format='%(if)%(upstream:short)%(then)%(else)%(color:bold red)%(end)%(refname:short)' refs/heads

(они будут отображаться красным на выходе)

или в качестве альтернативы (при условии, что ваш пульт дистанционного управления имеет имя origin):

git branch -vv | grep -v origin/

... и на последнем этапе необходимо вручную удалить их с помощью

git branch -d <branch>

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

0 голосов
/ 01 марта 2019

Их не следует удалять.

Ваши локальные ветви - которые на самом деле следует просто назвать "вашими ветвями" - ваши .Только ваши имена для удаленного отслеживания , origin/* в этом случае не являются вашими. 1 Так что, если origin имел ветку с именем xyzzy ранее, но не имеетБолее того, git fetch --prune origin или git remote prune origin удаляет ваш origin/xyzzy в соответствии с отсутствием origin xyzzy.

Это не касается ваших ветвей, которые твои .Если вы уверены, что они могут пойти сейчас, вам придется удалить их самостоятельно.Люди написали сценарии для этого, но сказали, что сценарии, как правило, глупы: они часто удаляют ваш xyzzy , даже если у вас есть коммиты, которые вы забыли нажать до слияния или намеревались перейти в другую ветку ,и как только ваш xyzzy удален, часто бывает слишком поздно.Поэтому будьте осторожны с такими сценариями.

(Было бы неплохо иметь опцию для этих команд, которая говорит им: Если у меня есть локальная ветвь xyzzy, которая указывает на тот же коммит, что и origin/xyzzy, а вы удаляете origin/xyzzy, удалите и мой локальный xyzzy. Более того, если у меня есть xyzzy, но origin/xyzzy не не совпадает с моим xyzzy, жаловаться и останавливаться,так что я могу понять, что с этим делать. Но у них нет такой опции.)


1 Технически, это тоже ваше.Просто ваш Git настроен так, что когда ваш Git вызывает свой Git - тот, что находится на origin - и получает от них названия веток и хеш-идентификаторы, ваш Git перезаписывает ваш собственный origin/master с помощьюих обновили master.Так что, хотя origin/master - это имя в базе данных "имя-хэш-идентификатор" вашего репозитория Git, это не то имя, которым вы обычно управляете сами.Вы просто позволяете своему Git отражать их Git, и их master становится вашим origin/master.

Или, говоря короче: ваш Git origin/master - это способ вашего Git вспомнить их Git master.Так что это вроде их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...