Я хочу, чтобы мои локальные и удаленные репозитории всегда были синхронизированы с точки зрения ветвей.
После проверки запроса на загрузку на GitHub я объединяю и удаляю свою ветку там (удаленно). Как я могу получить эту информацию в своем локальном репозитории и заставить Git удалить мою локальную версию ветки?
git ls-remote
иgit show-ref
.git symbolic-ref
иgit update-ref
.Ответы:
Быстрый способ
NB: если вы не включены
master
, это может удалить ветку. Продолжайте читать для «лучшего пути».Убедитесь, что мы держим хозяина
Вы можете убедиться, что
master
, или любая другая ветка в этом отношении, не будет удалена с помощьюgrep
ing для большего. В этом случае вы бы пошли:Так что, если бы мы хотели сохранить
master
,develop
и,staging
например, мы бы пошли:Сделайте этот псевдоним
Поскольку это немного долго, вы можете добавить псевдоним в ваш
.zshrc
или.bashrc
. Шахта называетсяgbpurge
(дляgit branches purge
):Затем перезагрузите ваш
.bashrc
или.zshrc
:или
источник
branch
это фарфор, а не сантехническая команда , следите за изменениями пользовательского интерфейса в будущих версиях Git, которые могут его сломать.master
будет удалена.grep -Ev '(\*|master|important-branch)'
~/.gitconfig
вместо этого, добавьте в[alias]
раздел следующее:gbpurge = !"git branch --merged | grep -Ev '\\*|master|develop|staging' | xargs -n 1 git branch -d"
(не нужно использовать () в выражении grep).Я использую тот же поток с GitHub, и не нашел предыдущих ответов удовлетворяющих меня, поскольку
git branch --merged
списки веток были объединены, но не все из них были удалены удаленно в моем случае. Итак, это сработало для меня:git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d
где:
git fetch --all -p
: обновить статус локальных филиаловgit branch -vv
: список местных филиалов статусgrep ": gone]"
: отфильтровать удаленныеawk '{ print $1 }'
: извлечь их именаxargs -n 1 git branch -d
: передайте имя команде удаленияПримечание: если вы предпочитаете, вы можете использовать -D вместо -d, что приводит к удалению.
Например:
Ссылка:
http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches
источник
git checkout master; git pull origin master; git fetch --all -p; git branch -vv | grep gone | awk '{ print $1 }' | xargs -n 1 git branch -d
branch -vv
показано последнее сообщение о коммите из ветви. Если бы вы оказались в этом сообщении, тоgrep gone
также попали бы в эту ветку. Так что,grep ": gone]"
возможно, немного безопаснее в использовании.awk '$3 $4 ~ /:gone]$/ { print $1 }'
-D
вместо-d
этого это идеальный ответ!пытаться:
который удаляет вашу локальную ветку, если удалена соответствующая удаленная ветка.
Обновлено:
Вышеприведенное утверждение не так правильно.
На самом деле, бег
git pull --prune
будет только удалить удаленное отслеживание ветвей , такие какЗатем вы можете запустить
git branch -r
проверку удаленных веток на вашем компьютере. Предположим, что левые ветви:что означает, что ветвь
origin/fff
удалена.Итак, после запуска
git pull --prune
просто запустите:git branch --merged | grep -vFf <(git branch -r | cut -d'/' -f2-)
Вы можете узнать все местные филиалы, которые:
затем
<the command above> | xargs git branch -d
можете удалить их все.источник
--prune
Флаг будет удалять только дистанционное отслеживание ветвей, а не местные отделения.git fetch --prune
, это мой выборgit pull --prune
привела к тому, что «Вы попросили извлечь из удаленного« --prune », но не указали ветку. Поскольку это не настроенный по умолчанию удаленный пульт для вашей текущей ветки, вы необходимо указать ветку в командной строке. "Это должно работать, чтобы избежать удаления основной ветки и ветки разработки с принятым решением:
источник
Для людей, использующих PowerShell, это эквивалентно ответу выше :
git branch -D
в каждую из найденных ветокисточник
Ничто из этого не помогло мне. Вы можете увидеть мой другой ответ здесь: https://stackoverflow.com/a/34969726/550454
Но по сути, теперь у меня есть это в моем
~/.gitconfig
:источник
Очень простое решение: удалите локальное хранилище и заново клонируйте удаленное. Может показаться не очень элегантным, но это просто, и вы точно поймете, что делаете, не читая man-страниц :-).
источник
Я написал этот однострочник, чтобы перечислить все локальные ветви, которые не имеют соответствующей удаленной ветви:
После того, как это сделано, удаление этих локальных веток легко с
xargs
:источник
master
тоже, это не работает, как ожидалось; будь остороженЯ просто делаю это, чтобы удалить объединенные локальные ветви:
и если вы хотите удалить несуществующие трекинг тоже:
источник
Если вы только что добавили свою ветку в master, выполните следующее в git bash:
Если вы в данный момент находитесь в этой ветке, она вернет вас к мастеру. На данный момент сделать тягу с
источник
Голосовавший ответ действительно может удалить мастера. Рассмотрим приведенный ниже практический пример.
У меня было две ветки функций hemen_README и hemen_BASEBOX, которые были объединены в разработку, а затем разработка была объединена в мастер. Ветви объектов hemen_README и hemen_BASEBOX были удалены удаленно, но все еще отображались локально. Кроме того, я не на мастер на месте, но на разработке.
В таком случае
Так что, если я запускаю приведенную выше частичную команду
Обратите внимание, что он также показывает мастер, который в конечном итоге будет удален.
В любом случае я смог это сделать. Я делюсь с вами своим журналом сеансов о том, как я этого достиг.
Я только что проверил, что будет обрезано, а затем обрезать его. глядя на команду филиала ниже мы позаботились о пультах
Теперь идите дальше и удалите местные филиалы
Хорошо, теперь ветки такие, как хотелось.
источник