#git
#git
Вопрос:
У меня есть удаленный репозиторий git и локальный, с которым я работаю. Всякий раз, когда я делаю какие-либо изменения локально, я отправляю их на удаленный. Затем я иногда делаю «git commit» на удаленном, чтобы сохранить изменения в удаленных файлах.
Я вообще не редактирую удаленный репозиторий напрямую. Я просто фиксирую изменения. И я разработчик-одиночка, никто другой не работает над этими репозиториями.
Почему я получаю ошибку, которая, насколько я знаю, означает, что я должен сначала извлечь?
Я не хочу извлекать, потому что файлы удаленного репозитория устарели, и мои локальные изменения будут потеряны. Это действительно раздражает, почему это происходит? И как я могу исправить без необходимости извлекать или воссоздавать репозиторий? (как вы можете видеть, здесь это что-то вроде стиля управления версиями subversion)
РЕДАКТИРОВАТЬ — Ошибка :
To ssh://...
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://...'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
Комментарии:
1. Что вы имеете в виду, когда выполняете «git commit» в удаленном репозитории? Является ли удаленный репозиторий простым репозиторием? Обычно вы должны отправлять только в голый репозиторий, но вы не можете зафиксировать голый репозиторий, поэтому я немного запутался в том, что вы пытаетесь сделать. Можете ли вы показать пример реальных команд, которые вы запускаете, и фактический результат, который вы получаете?
2. что ж, эта часть вызвала у меня некоторые подозрения, поэтому я также упоминаю об этом. Репозитории создаются с помощью ‘git init’. Я выполняю фиксацию в удаленном репозитории, потому что в противном случае я не вижу изменений в этом репозитории. Я добавляю код, чтобы показать ошибку
Ответ №1:
Что вам следует сделать, так это создать удаленный репозиторий как пустой репозиторий. Пустой репозиторий — это просто репозиторий git, без текущей проверки (то есть это похоже на содержимое .git
каталога в обычном репозитории Git, поэтому он содержит объекты и ссылки, но у него нет индекса или рабочей копии файловой иерархии). Если вы попытаетесь выполнить отправку в не-пустой репозиторий, рабочая копия не будет синхронизирована с тем, что зафиксировано, и вызовет проблемы, которые вы видите здесь.
Вы можете создать пустой репозиторий с помощью git init --bare repo.git
. Или вы можете клонировать существующий репозиторий как простое репозиторий, используя git clone --bare original-repo new-repo.git
.
Если вы хотите иметь извлеченную копию репозитория на своем сервере, вам нужно будет создать новое, не являющееся открытым репозиторием на сервере, а затем перейти в это репозиторий из исходного репозитория, в который вы отправляете.
Комментарии:
1. Итак, если я правильно понимаю, идея заключается в том, что простой репозиторий подобен индексу, который имеет внутренний способ представления сохраненных данных, а затем вы просто клонируете рабочую (или резервную) копию.
2. В принципе, @ SpyrosP. В простом репозитории хранятся только история, ветви и теги, но нет какой-либо рабочей копии одной конкретной версии, как в обычном репозитории. Вы можете клонировать простой репозиторий, чтобы создать обычный репозиторий с рабочей копией, в которой вы выполняете свою работу.
3. Спасибо за разъяснение, это точно спасает положение 🙂
Ответ №2:
Вот еще один вариант.
git reset --mixed origin/master
git add .
git commit -m "Your message"
git push origin master
Ответ №3:
это всегда означает, что вы не синхронизировали удаленный репозиторий с локальным репозиторием, поэтому сначала вы должны синхронизировать их с помощью команды git pull следующим образом:
git checkout master
git pull origin master
после этого процесса вы синхронизируете их, а затем сможете отправить изменения в удаленное репозиторий, выполнив следующие действия:
git add [filename/directory]
git commit -m"input your message"
git remote add origin https://github.com//yourname.git
git push origin master
Комментарии:
1. git push origin master —force, принудительное нажатие сработало для меня.
Ответ №4:
Я также столкнулся с такой же ошибкой и потратил много времени, вот окончательное решение.
-
при использовании git push origin master мы получаем ошибку, поэтому решение — принудительный ввод. поэтому используйте второй вариант. у меня это сработало.
-
git нажимает origin master —force
Комментарии:
1. Это действительно сработало для меня, спасибо!
Ответ №5:
Я столкнулся с аналогичной проблемой, и следующая команда сработала. git push —set-upstream origin master