Почему ветка Git удалена на удаленном воскресении в другой день?
Я переименовал локальную ветку, удалил то же самое на удаленном, выдвинул новое имя на удаленное и установил отслеживание следующим образом:
git checkout my_branch
git branch -m my_branch feature/my_branch # rename
git push origin :my_branch # delete on remote
git push --set-upstream origin feature/my_branch # push and set tracking
Я сделал это для 20+ веток (через скрипт) и ошибок не было.
Участники сделали git fetch --prune
и обновил свои локальные ветки (переименовал и установил новую ветку трекинга).
На следующий день (в пятницу), без какого-либо нового коммита, старый origin/my_branch
вновь появился на том же коммите, что и origin/feature/my_branch
, Не было нового коммита и толчка, которые кто-то мог бы сделать, используя старую ветвь отслеживания. Итак, я удалил origin/my_branch
,
Еще раз сегодня (после выходных) origin/my_branch
вновь появился на том же старом коммите (датированном четвергом) origin/feature/my_branch
включен
Я не понимаю, как и почему Git (сборщик мусора) мог воскресить удаленную ветку, но, возможно, причина в Gitblit (который обрабатывает мое удаленное администрирование)?
1 ответ
Это не имеет никакого смысла, если одно из следующего не является ответственным
- Кто-то еще в вашей команде снова продвигает эту ветку
- Внешний код (hook, script, cron и т. Д.) Создает эту ветку.
- Это ветвь по умолчанию, определенная в
Gitblit
так что его воссоздание
Общим для всех является то, что кто-то (человек или сценарий) создает / продвигает этот код.
Скорее всего, это произойдет, если кто-то еще в вашей команде снова продвинет эту ветку.
Что касается GIT версии <2, когда вы пишете git pull/push
без указания удаленного или филиала это будет pull/push
все ваши ветви. Это было обновлено на версии 2.
Git v2.0 Примечания к выпуску
Когда "git push [$there]" не говорит, что нажать, мы до сих пор использовали традиционную семантику "соответствия" (все ваши ветви были отправлены на удаленный сервер, если там уже есть ветви с одинаковым именем), В Git 2.0 по умолчанию теперь используется "простая" семантика, которая выдвигает:
только текущая ветвь к ветке с тем же именем, и только если текущая ветвь настроена на интеграцию с этой удаленной ветвью, если вы отправляете на тот же самый удаленный, из которого вы выбираете; или же
только текущая ветка на ветку с тем же именем, если вы отправляете на удаленный, который не там, где вы обычно выбираете.
Вы можете использовать переменную конфигурации "push.default", чтобы изменить это. Если вы являетесь старожилом и хотите продолжать использовать семантику "соответствия", вы можете, например, установить для переменной "соответствие". Прочитайте документацию для других возможностей.