Я не могу нажать на мерзавца? - PullRequest
14 голосов
/ 30 августа 2010

git push origin master показывает ошибку

не удалось выдвинуть некоторые ссылки на 'git@github.com:xyz/abc.git' Чтобы предотвратить потерю истории, обновления без ускоренной пересылки были отклонены Объедините удаленные изменения перед повторным нажатием. Смотрите «Примечание о раздел «git push --help» для подробностей.

Что это? Как это восстановить?

Ответы [ 6 ]

30 голосов
/ 30 августа 2010

См. Раздел «проталкивание ветки» со страницы справки GitHub :

Обработка ошибок «без ускоренной перемотки вперед»

Время от времени вы можете столкнуться с этой ошибкой при нажатии:

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

Поначалу эта ошибка может быть немного подавляющей, не бойтесь.
Проще говоря,git не может сделать изменения на пульте без потери коммитов, поэтому он отклоняет push.Обычно это вызвано тем, что другой пользователь нажимает на ту же ветвь.
Это можно исправить, выбрав и объединив удаленную ветвь, или используя pull для одновременного выполнения обоих действий.

В других случаях эта ошибкарезультат разрушительных изменений, внесенных локально с помощью таких команд, как git commit --amend или git rebase.
. Хотя вы можете переопределить пульт, добавив --force к команде push, делать это следует только в том случае, если вы абсолютно уверены, что это то, чтоты хочешь сделать.Принудительные нажатия могут вызвать проблемы для других пользователей, которые загрузили удаленную ветвь, и это считается плохой практикой.Если есть сомнения, не нажимайте принудительно.


Сведения о режиме на "Примечание о ускоренной перемотке вперед" git push, как упомянул Михаил Мрозек в комментариях.

5 голосов
/ 23 июня 2012

В дополнение к ответу VonC,

Если вы намереваетесь переопределить удаленные изменения на локальные,

  $git push --force

будет делать.

3 голосов
/ 15 июля 2011

Довольно важно: это также может произойти, если имя ветви, в которой вы находитесь (и хотите объединить), и ветка вверх по течению не совпадают.Тогда рабочий процесс может выглядеть так:

git pull --rebase             # to retrieve upstream changes, replay yours on top
git push --dry-run --verbose origin HEAD:master   # always good idea: dry-runs..
git push origin HEAD:master   # actually push current branch head (non-master) to upstream master
2 голосов
/ 16 сентября 2013

Сначала вытащить, затем нажать

источник git pull any_branch_name

2 голосов
/ 13 октября 2011

Если вы получаете эту ошибку и ваш файл .git / config в порядке, тогда выполните следующие действия (это распространенная проблема с подмодулем в git-репозиториях - снова сделайте это из подмодуля dir)

  1. мастер git checkout
  2. git pull
  3. (слияние происходит в фоновом режиме)
  4. git push
0 голосов
/ 06 февраля 2014

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

git push origin master   <========== On "mybranch"

Сделайте это:

git checkout master      <========== Switch to the branch you want to push to
git pull origin master   <========== Get latest from remote repository
git pull origin mybranch <========== Merge in changes from "mybranch"
======== Resolve any issues ========
git push origin master   <========== Push the merged changes
...