В нашем репозитории GitHub сотрудник удалил ветку с именем release
. Но когда я бегу git checkout release
локально, я всегда получаю удаленную ветку release
. То же самое, даже когда я проверил другую ветку, удалил release
ветку с помощью git branch -D release
и снова запустился git checkout release
.
Что-то нужно исправить в репозитории GitHub, или я должен что-то исправить локально?
git branch --remote
выводит, после запускаgit fetch
? Возможно, вам придется сократить,git fetch -p
чтобы забыть удаленные ветви.git branch --remote
выводorigin/release
. Вы хотите запуститьgit fetch -p
без дополнительных аргументов и удалит ли он все удаленные удаленные ветви?git fetch -p
без дополнительных аргументов удалит все удаленные удаленные ветки.Ответы:
После удаления ветви на удаленной стороне вы все еще можете увидеть эту ранее извлеченную удаленную ветку локально, см.
Вы только удалили «релиз», но не «пульты / происхождение / релиз». Удалить это так:
Или удалите все извлеченные ветви, которые больше не существуют на удаленной стороне:
источник
git branch -rd origin/release
что это-r
значит? Значит так-d
же, как-D
? Можноgit branch -rd origin/release
заменить наgit branch -d remotes/origin/release
?List or delete (if used with -d) the remote-tracking branches.
; -D:Shortcut for --delete --force.
git branch -rd origin/release
заменить наgit branch -d remotes/origin/release
?-r
относится к удаленным веткам, это необходимо. Локальные и удаленные филиалы хранятся в разных каталогах, сравниваютсяls -l .git/refs/heads
иls -l .git/refs/remotes
. Вы могли бы также иметь местное отделение под названием ,remotes/origin/release
которое было бы без удаления-r
. Это может показаться странным, но вы можете просто поиграть, создать ветки со странными именами и посмотреть, как это выглядит.git/
.Когда ветки удаляются удаленно, вам нужно сократить локальный репозиторий - самый простой способ сделать это с
Это обновит ваш локальный репозиторий со всеми изменениями, внесенными в удаленный репозиторий, но без обновления каких-либо локальных филиалов. После запуска этого,
больше не будет показывать удаленную удаленную ветку.
git репозитории завершены, будь то в вашей собственной системе или на сервере. Поэтому, когда вы впервые клонируете репозиторий, вы получаете полную копию, и ваш локальный git «знает» обо всех удаленных филиалах, а также о ваших локальных филиалах. Эта информация не синхронизируется автоматически, поэтому, когда ваш коллега удалил
release
ветку на сервере, ваш локальный git-репозиторий не потерял свое представление об удаленнойrelease
ветке. Синхронизация сgit fetch
обновлениями всей локальной информации в удаленных ветвях, чтобы они соответствовали состоянию на сервере (строго говоря, удаленный репозиторий, где бы он ни находился), но без удаления какой-либо локальной информации в удаленных ветвях. Удаление с помощьюgit fetch -p
(илиgit fetch --prune
, илиgit remote prune
) удаляет локальную информацию об удаленных ветвях, которые были удалены.источник
-p
(--prune
) форсирует это.release
веткуgit branch -D release
доgit checkout release
того, как онаgit checkout release
перестала получатьrelease
ветку?git checkout release
что автоматически создаст ветку, если есть удаленная ветка с таким именем.git branch -D release
раньше, уже удалилrelease
ветку в моем локальном хранилище; В последнем случае сотрудник удалилrelease
ветку на GitHub; Так что я до сих пор не уверен, почему «будет автоматически воссоздавать ветку, если есть удаленная ветка с таким именем»?Тим: Git - это распределенная VCS, поэтому, когда вы клонируете репозиторий с удаленного на локальный, он клонирует все (историю). Поэтому, когда вы клонировали свое репо, у него была ветка с названием release. Так как ваш коллега удалил ветку релиза удаленно, пока вы не
git fetch -p
удалите или не удалите эту ветвь явно, ваша локальная ветка будет иметь эту ветку.источник
Возможно, это немного косвенно, но перспектива этого сайта может помочь понять общую тему удаления веток:
http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/
Есть некоторые совпадения с тем, что уже обсуждалось здесь, но основное внимание уделяется ведению домашнего хозяйства: удалению веток, удаленных и локальных, которые больше не нужны в среде совместной работы. В частности,
git branch --merged
команда определяет ветви, которые можно безопасно удалить из-за слияния с вашей основной линией (или любой другой веткой, которая вас интересует). Если вы сотрудничаете, некоторые из таких мини-сценариев, как этот, представят вещи в хорошем, удобном для восприятия формате с датами и авторами.(К сожалению, «хороший, легко усваиваемый» не относится к форматированию самих сценариев.)
источник