Как объединить удаленные изменения на GitHub? - PullRequest
134 голосов
/ 11 ноября 2009

Я получаю следующую ошибку при первой попытке Github push:

[rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:me/me.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast forward'
section of 'git push --help' for details.

как я могу это исправить и объединить удаленные изменения?

Ответы [ 7 ]

104 голосов
/ 11 ноября 2009

Подробнее см. В разделе «ускоренная перемотка вперед» в « git push --help ».

Вы можете выполнить «git pull», разрешить потенциальные конфликтыи "git push" результат.«Git pull» создаст коммит слияния C между коммитами A и B.

В качестве альтернативы, вы можете отменить изменение между X и B поверх A, с помощью «git pull --rebase», и нажатьрезультат обратно.Перебазирование создаст новый коммит D, который строит изменение между X и B поверх A.

82 голосов
/ 09 марта 2012

Вы также можете принудительно нажать, добавив символ + перед названием вашей ветви.

git push origin +some_branch
20 голосов
/ 11 ноября 2009

У вас, вероятно, есть изменения на github, которые вы никогда не объединяли. Попробуйте git pull получить и объединить изменения, тогда вы сможете нажать. Извините, если я неправильно понял ваш вопрос.

11 голосов
/ 03 мая 2012

Если вы «git pull» с сообщением «Уже обновлены» и по-прежнему получаете эту ошибку, возможно, это связано с тем, что одна из ваших других веток не обновилась. Попробуйте переключиться на другую ветку и удостовериться, что она также актуальна, прежде чем снова попытаться выполнить «git push»:

Переключитесь на ветку "foo" и обновите ее:

$ git checkout foo
$ git pull

Вы можете увидеть ветки, набрав команду:

$ git branch
7 голосов
/ 22 апреля 2013

Вы можете заставить его толкать, но, пожалуйста, делайте это ТОЛЬКО, когда вы совершенно уверены, что делаете.

Команда:

git push -f 
3 голосов
/ 04 июня 2012

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

Вы можете решить это, удалив локальный тег:

$ git tag --delete foo_tag
2 голосов
/ 22 июля 2012

Когда я получил эту ошибку, я создал резервную копию всей папки проекта. Тогда я сделал что-то вроде

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

... в зависимости от имени вашей ветви (если оно не master).

Тогда я сделал git pull --rebase. После этого я заменил вытащенные файлы на файлы моего резервного проекта. Теперь я готов снова зафиксировать свои изменения и нажать.

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