Я установил удаленный непустой "основной" репозиторий и клонировал его на свой компьютер. Я сделал некоторые локальные изменения, обновил локальный репозиторий и перенес изменения в удаленный репозиторий. До этого момента все было в порядке.
Теперь мне нужно было что-то изменить в удаленном репозитории. Затем я изменил что-то в своем локальном репозитории. Я понял, что изменения в удаленном репозитории не нужны. Поэтому я попытался git push
из локальной репозитории в удаленную, но получил ошибку типа:
Чтобы предотвратить потерю истории, небыстрое обновление было отклонено Слияние удаленных изменений перед повторным выталкиванием. См. 'Примечание о быстрой перемотке' в разделе
git push --help
для подробностей.
Я подумал, что возможно
git push --force
заставит мою локальную копию перенести изменения в удаленную и сделать их одинаковыми. Это действительно заставляет обновление, но когда я возвращаюсь к удалённому репозиторию и делаю коммит, я замечаю, что файлы содержат устаревшие изменения (те, которые ранее были в основном удалённом репозитории).
Как я уже упоминал в комментарии к одному из ответов:
[Я] пробовал форсировать, но при возвращении на главный сервер для сохранения изменений, я получаю устаревшие staging. Таким образом, когда я фиксирую изменения, репозитории не совпадают. И когда я пытаюсь снова использовать git push, я получаю ту же ошибку.
Как я могу решить эту проблему?
Просто сделайте:
git push origin <your_branch_name> --force
или если у вас есть конкретное репо:
git push https://git.... --force
Это удалит ваш предыдущий(ие) коммит(ы) и продвинет ваш текущий.
Возможно, это не совсем правильно, но если кто-то наткнётся на эту страницу и подумает, что ему может понадобиться простое решение...
Также обратите внимание, что -f
- это сокращение от --force
, так что
git push origin <your_branch_name> -f
тоже подойдет.
И если нажать-сил не't РАБОТА Вы можете сделать пуш-удалить
. Посмотрите на 2<суп>НД</суп> линия на этом экземпляре:
git reset --hard HEAD~3 # reset current branch to 3 commits ago
git push origin master --delete # do a very very bad bad thing
git push origin master # regular push
Но будьте осторожны...
Другими словами:
тянуть
.Конечно есть очень редкие исключения даже из этого правила, но в большинстве случаев это's не нужно это делать и создавать проблемы всем остальным.
И всегда будьте осторожны с тем, что вы нажимаете на публичных РЕПО. Возвращаясь:
git revert -n HEAD~3..HEAD # prepare a new commit reverting last 3 commits
git commit -m "sorry - revert last 3 commits because I was not careful"
git push origin master # regular push
По сути, как руководители происхождения (от вернуться и от зло сброс) будет содержать те же файлы.
Другая проблема пуш-сила
может привести, когда кто-то что-либо толкать перед этим, но после того, как вы've уже извлечена. Если вы усилие нажима вашего перебазированы теперь вы заменить работу с другим.
git толчок-силой-с-лизинг
введены в ГИТ 1.8.5 (Спасибо @VonC комментировать вопрос) направлен на решение этой конкретной проблемы. В основном, это приведет к ошибке и не давить, если удаленный был изменен с момента вашего последнего извлечения.
Это хорошо, если вы'вновь действительно уверен, что ничья-сила нужна, но все равно хотите предотвратить дополнительные проблемы. Я'пойду так далеко, чтобы сказать, что это должно быть по умолчанию `толчок-силой поведения. Но это's все еще далеко не повод, чтобы заставить "толчок". Люди, кто за уши прежде чем ваш перебазировка будет еще много неприятностей, которые можно легко избежать, если бы вы вернулась вместо.
И поскольку мы're говоря о `ГИТ пуш --экземпляры...
@linquize привел пример хороший толчок силы на комментарии: конфиденциальных данных. Вы'вэ ошибочно просочились данные, что должны'т быть толкнул. Если вы'вновь достаточно быстро, вы можете фильм"исправить" ПО - *
это, заставляя толчок сверху.
*
Данные по-прежнему будут находиться на удаленном Если вы также делаете мусор собирать или очистить его как-то. Также существует очевидный потенциал для его распространения на других, кто'д уши это уже, но вы получаете идею.
Прежде всего, я бы не вносил никаких изменений непосредственно в "основное" репо. Если вы действительно хотите иметь "основное" репо, то вы должны только нажимать на него, никогда не изменяя его напрямую.
Что касается ошибки, которую вы получаете, пробовали ли вы git pull
из вашей локальной репо, а затем git push
в основную репо? То, что вы сейчас делаете (если я правильно понял) - это принудительный push и потеря изменений в "основном" репозитории. Вам следует сначала объединить изменения локально.
Я бы очень рекомендовал:
добавлять только в основное репо
убедиться, что основное репозиторий является пустым репозиторием, чтобы никогда не возникало проблем с тем, что рабочее дерево основного репозитория не синхронизировано с его базой .git
. Смотрите "Как переместить локальный git-репозиторий на другой компьютер?"
Если вам нужно внести изменения в основное (голое) репозиторий, клонируйте его (на основном сервере), внесите изменения и вытолкните обратно в него.
Другими словами, держите "голое" репозиторий доступным как с главного сервера, так и с локального компьютера, чтобы иметь единый апстрим репозиторий, из которого/в который можно вытаскивать/вытаскивать.
используйте эту команду:
git push -f origin master
Это было наше решение для замены мастер на корпоративном хранилище на GitHub при сохранении истории.
пуш-Ф
мастер по корпоративным хранилищам часто отключен для сохранения истории филиала. Это решение сработало для нас.
git fetch desiredOrigin
git checkout -b master desiredOrigin/master // get origin master
git checkout currentBranch // move to target branch
git merge -s ours master // merge using ours over master
// vim will open for the commit message
git checkout master // move to master
git merge currentBranch // merge resolved changes into master
нажимаем ваш филиал desiredOrigin
и создать пр
У меня был тот же вопрос, но понял он, наконец. Что вам скорее всего нужно сделать, это выполните следующие две команды git (замена хэш коммитов номер ревизии):
ГИТ кассе <окрошка> git толчок -Ф руководитель:учитель