Почему ветка 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", чтобы изменить это. Если вы являетесь старожилом и хотите продолжать использовать семантику "соответствия", вы можете, например, установить для переменной "соответствие". Прочитайте документацию для других возможностей.

Другие вопросы по тегам