Как я могу исправить локальную устаревшую ошибку с помощью git? - PullRequest
2 голосов
/ 01 апреля 2011

Я пытаюсь перейти к удаленному репо, но продолжаю получать сообщение об ошибке ниже.

$ git push
To user@remote.net:/home/user/repos/remoterepo.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'user@remote:/home/user/repos/remoterepo.git'
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.

git remote show origin показывает master pushes to master (local out of date). Я уверен, что это не должно быть устаревшим, поскольку я выдвигаю только из ветви.

У меня есть 2 вопроса.

  1. возможно ли заставить локальную ветку перезаписать удаленную? Вытягивание перезапишет изменения, которые определенно позже, чем содержимое в хранилище.

  2. Это примерно второй или третий раз, когда у меня возникла эта проблема. Единственное, что я могу думать о том, что локальная версия git - git version 1.7.3.1.msysgit.0 (для Windows), а удаленная версия - git version 1.6.5 (Ubuntu Jaunty). Возможно ли, что разные версии git могут вызывать искажения?

1 Ответ

11 голосов
/ 01 апреля 2011
  1. ( см. Обновление ниже ) да, это возможно: git push --force. Но делайте это только в том случае, если вы абсолютно уверены, что никто не читал репозиторий с момента последнего push (см. Как передать исправленный коммит в удаленный репозиторий Git? для углубленного обсуждения).
  2. Мне кажется, что сначала вам нужно git pull, прежде чем вы сможете push. Я не думаю, что это ошибка, связанная со временем. Сообщение указывает, что на сервере есть более новые коммиты (идентифицированные по их хэшу фиксации, а не по дате фиксации) ... Чтобы увидеть, что изменилось, выполните git fetch вместо git pull и посмотрите на изменения, используя git log origin/master ...

Обновление : тем временем push узнал опцию --force-with-lease, которая гарантирует, что вы случайно не сломаете что-либо: https://developer.atlassian.com/blog/2015/04/force-with-lease/. Предпочитайте это, по возможности, --force!

...