2010-08-30 2 views
13

git push origin master показывает ошибкуЯ не могу нажать на git?

не удалось подтолкнуть некоторые рефов к '[email protected]:xyz/abc.git' Чтобы предотвратить вас от потери истории, не быстро вперед обновления были отклонены Объединить удаленные изменения перед нажатием снова. Подробную информацию см. В разделе «Заметки об « быстрая перемотка »раздела« git push --help ».

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

+2

ли вы «увидеть„Примечание о ускоренной перемотке вперед“раздела„мерзавец нажимного --help“для получения информации»? Здесь слишком много времени, чтобы воспроизвести здесь, но он описывает точную проблему, а также диаграммы ascii-art –

ответ

28

Смотрите "pushing a branch" section from GitHub help page:

Работа с ошибками «не быстро вперед»

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

$ 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. 

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

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


детали режима на "Note about fast-forwards" of git push, как уже упоминалось, Michael Mrozek в комментариях.

3

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

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

Если вы получаете эту ошибку и свою.мерзавец/конфигурационный файл просто отлично затем пройти через эти шаги (это общая проблема с подмодуль в GIT РЕПО - снова это сделать из субмодуля директории)

  1. мастер мерзавец фотографии
  2. мерзавец тянуть
  3. (слияние происходит в фоновом режиме)
  4. мерзавец толчок
+0

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

+0

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

5

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

в случае, если вы, инте nd для переопределения удаленных изменений с вашим местным,

$git push --force 

сделаю.

+0

Как ответ VonC говорит: «Хотя вы можете переопределить удаленный пут, добавив -force в команду push, вы должны сделать это, только если вы абсолютно уверены, что это то, что вы хотите сделать». – Intrications

2

Первый Вытяните затем нажмите

мерзавец тянуть происхождения any_branch_name

0

я тоже имел это и не мог найти где-нибудь на 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