В то время как имена веток в основном просто строки, поэтому hotfix
и hotfix/my-hotfix-branch-name
являются просто очевидными, то есть два разных имени - части Git настаивают (по причинам как хорошим, так и плохим) при леченииони похожи на компоненты каталогов и имен файлов.
(Примечание: если вы работаете в Windows, вы можете мысленно заменить /
на \
здесь. Или просто поймите, что a/b
работает так же хорошо в Windowsкак a\b
, для почти всех целей.)
Если у вас есть файл с именем README
, ваша ОС не позволит вам создать другой файл с именем README/TOO
.То есть слот сущности README
занят "сущностью файла".Сначала вы должны удалить или переименовать README
, затем создать каталог (или папку, если вы предпочитаете этот термин) с именем README
.Внутри этого каталога (или папки) вы теперь можете создавать больше файлов или перемещать исходный файл README
в этот каталог.
Git накладывает точно такие же ограничения на имена веток и надистанционное отслеживание имен.Если существует ветвь с именем hotfix
, вы не можете создать ветку с именем hotfix/my-hotfix-branch-name
.Вы исправили это в вашем хранилище, сначала удалив hotfix
.Вы должны сделать то же самое в во всех остальных репозиториях Git, которые вы намереваетесь использовать: , если у него есть hotfix
, удалите его.Затем вы можете создать этот другой Git-репозиторий hotfix/my-hotfix-branch-name
.
Похоже, ваш промежуточный сервер содержит ветку hotfix
.Возможно, вам придется войти на свой промежуточный сервер напрямую, или вы можете использовать git push --delete
для отправки ему запроса на удаление.В любом случае, вы должны получить , что Git, чтобы удалить имя этой ветви.Операции, выполняемые в вашем собственном репозитории, не помогают, потому что каждый репозиторий является независимым.
Когда проблема возникает в локальном репозитории, но из-за имен удаленного отслеживания, таких как origin/dir/file
, запуск git fetch -p origin
или git remote prune origin
должен решить проблему.И параметр -p
для fetch
- который можно записать --prune
- и подкоманда prune
для git remote
говорят вашему Git удалить имена для удаленного слежения, такие как origin/dir
Это существовало потому, что на сервере была (с акцентом на прошедшее время) ветвь с именем dir
, но с тех пор кто-то удалил эту ветвь.Ваши имена для удаленного отслеживания - это способ, которым ваш Git запоминает, какими были их ветви в последний раз, когда вы с ними разговаривали.Таким образом, у них была dir
ветвь, но у них больше нет ее;теперь у них есть ветка dir/file
.Ваш Git должен удалить ваш origin/dir
, прежде чем ваш Git сможет создать origin/dir/file
имя для удаленного отслеживания.