Удаленный отклонен (мелкое обновление не разрешено) после изменения удаленного URL Git
У меня есть проект под управлением версией Git, который я работал как на сервере, так и на моем локальном компьютере. Первоначально я установил удаленный источник в качестве локального компьютера, но теперь я хотел бы изменить его на BitBucket.
На сервере я использовал команду
git remote set-url origin bitbucket_address
Но теперь, когда я пытаюсь продвинуть свой проект, я получаю ошибку
! [remote rejected] master -> master (shallow update not allowed)
Что является причиной этого и как я могу это исправить?
11 ответов
Как вы уже использовали git clone --depth <number>
клонировать вашу локальную версию. Это приводит к мелкому клону. Одним из ограничений такого клона является то, что вы не можете перенести его в новый репозиторий.
Это означает, что вы должны закрыть свой репозиторий. Для этого вам нужно будет снова добавить свой старый пульт.
git remote add old <path-to-old-remote>
После этого мы используем git fetch
извлечь оставшуюся историю из старого пульта (как предложено в этом ответе).
git fetch --unshallow old
И теперь вы сможете войти в свой новый удаленный репозиторий.
Примечание. После отказа от клона вы, очевидно, можете снова удалить старый пульт.
Если ваш репо origin
и оригинал репо upstream
:
git fetch --unshallow upstream
Другой вариант, если вы хотите сохранить репо как есть с новыми коммитами, которые вы добавили после мелкой, начальной фиксации, это: Поправьте этот коммит с помощью интерактивной перебазировки.
Начать интерактивную перебазировку, включая первый (корневой) коммит с
git rebase --interactive --root
Изменить
pick
первоначального коммита (ов) дляedit
и сохраните и закройте файл.Преобразуйте этот коммит в обычный, неглубокий коммит с
git commit --amend --no-edit
Это также изменит идентификатор фиксации и добавит вас в качестве соавтора к этой первоначальной фиксации.
Если вы клонировали репо с большей глубиной, чем 1, вам может потребоваться сделать то же самое для всех этих коммитов. Или, альтернативно, выполнить fixup
за все это во время интерактивной перебазировки.
Если вы хотите запустить новый репо как есть, вы можете попробовать это:
- Сначала удалите
old git folder
из вашего текущего репо,sudo rm -rf .git
- Затем инициализируйте GIT снова
git init
- Затем добавьте новый удаленный репо
git remote add your-new-repo
- Затем нажмите его.
Если получение --unshallow не работает. Должны быть проблемы с вашей веткой. Прежде чем нажимать, исправьте его с помощью следующей команды.
git filter-branch -- --all
Делать это только с --unshallow не работает из соображений БЕЗОПАСНОСТИ.
В случае конвейера битбакета
Это может быть связано с ограниченной глубиной фиксации (по умолчанию 50 коммитов).
Вы можете увеличить лимит
clone:
depth: 500 # include the last five hundred commits
pipelines:
default:
- step:
name: Cloning
script:
- echo "Clone all the things!"
Примечание. Используйте depth: full без ограничений.
Я исправил эту проблему. но, возможно, вы не можете это исправить. решение следующим образом.
- получить мелкий файл из git, например common/.git/shallow
- поместите этот файл в каталог .git на сервере git.
- отправьте свою ветку на сервер git.
В моей компании мне нужен ИТ-администратор, чтобы добавить файл, а у меня нет разрешений.
Основываясь на ответе, получившем наибольшее количество голосов, я создал псевдоним для автоматизации:
Добавить в свой
.gitconfig
:
[alias]
unshallow = !"git fetch --unshallow \"${1:-origin}\" # Unshallow from remote $1 (defaults to origin)"
Применение:
git unshallow
# unshallow текущая ветвь на основеorigin
удаленныйgit unshallow other-remote
# unshallow текущая ветвь с удаленногоother-remote
2021 6 октября
Для простого решения этой проблемы, если вас не интересуют существующие удаленные изменения, сделайте это следующим образом.
- Удалите свой местный
.git
папку из вашего репозитория. - Тип
git init
. - Добавьте свой пульт снова
git remote add origin <REMOTE_URL>
. - Установленный
main
ветвь поgit branch -M main
. - Продвиньте свои изменения тогда
git push --set-upstream origin main
.
Тада;) 🎉
Если у вас нет доступа к старому репозиторию, вы можете использовать
-
git rebase -i --root
- при первом изменении фиксации
pick
кedit
-
git commit --amend --no-edit
-
git rebase --continue
После вашего мерзавца будет думать, что не мелко.
источник. Как исправить мелкое обновление, не разрешенное в git
Просто удалитеshallow
файл в вашем /.git/shallow
Теперь это должно работать.