Git Push сбой без конфликта - PullRequest
5 голосов
/ 30 ноября 2011

Я прочитал несколько объяснений сломанного толчка git, но, похоже, ни одно из них не покрывает этот случай.

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

$ git pull
Already up-to-date

$ git st
# On branch unstable
nothing to commit (working directory clean)

$ git push
To ssh://<url>
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://<url>'
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.

<url> - это, конечно, реальный URL моего хранилища.

Нет никаких изменений, нет конфликтов, и я не уверен, что еще может привести к сбою.

Мне кажется, я все настроил правильно:

$ git remote -v
origin  ssh://<url> (fetch)
origin  ssh://<url> (push)

$ git branch -v
  master   175a09d [behind 18] openReview must now be called from thread other than main.
* unstable c9e5cab Progress on attachments.

В прошлом я только что удалил свой локальный репозиторий. Однако это происходит чаще.

  1. Что послужило причиной этого?
  2. Как мне избежать этого в будущем?
  3. Как мне это исправить?

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

Полное раскрытие - мой мерзавец немного ржавый, так что это может быть не на 100% правильно.

Похоже, что ваша локальная ветка 'master' находится за главной веткой 'origin'.Когда вы запустите 'git push', он попытается обновить все удаленные ветки соответствующими локальными ветвями.Чтобы просто нажать текущую ветку, попробуйте git push origin unstable.Кроме того, если вы хотите, чтобы ваша локальная главная ветвь обновлялась, извлеките основную ветвь и запустите git pull.

1 голос
/ 30 ноября 2011

Git жалуется, что ваша локальная история отличается от удаленной истории. Это может произойти, если вы перебазируете свою ветку или вообще делаете что-либо, что изменяет уже зафиксированные ревизии после того, как вы их нажали.

Чтобы исправить это, просто сделайте

git push -f #Warning, this will essentially clobber revisions on origin with your local revisions.

Важным моментом является то, что «обновления без ускоренной пересылки были отклонены». Обычно Git может просто скопировать ваши ревизии в удаленный репозиторий и поднять HEAD до самой последней ревизии. Однако, если ваша история отличается (вы отредактировали ревизию в вашей локальной сети после того, как вы перенесли ее на пульт), она не может просто перемотать вперед.

0 голосов
/ 30 ноября 2011

В те дни у меня были такие же проблемы, вы пытаетесь сделать обновление «без ускоренной перемотки вперед». Как вы можете прочитать в справке, набрав git push --help и прочитав «заметку о быстрой перемотке вперед», вы начали локально историю, которая отличается от той, что была в вашем репо. Если вы УВЕРЕНЫ, что локальное отделение обновлено, вы можете принудительно нажать git push --force, чтобы перезаписать ваше удаленное хранилище на локальное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...