Почему я получаю «ошибка: не удалось отправить некоторые ссылки»?

#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:

Я также столкнулся с такой же ошибкой и потратил много времени, вот окончательное решение.

  1. при использовании git push origin master мы получаем ошибку, поэтому решение — принудительный ввод. поэтому используйте второй вариант. у меня это сработало.

  2. git нажимает origin master —force

Комментарии:

1. Это действительно сработало для меня, спасибо!

Ответ №5:

Я столкнулся с аналогичной проблемой, и следующая команда сработала. git push —set-upstream origin master