відхилений master -> master (не швидкий вперед)


218

Я намагаюся підштовхнути свій проект (усі файли в новому сховищі). Я виконую кроки, але коли я натискаю, git push -u origin masterя отримую цю помилку:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.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.

Я багато разів отримував цю помилку і не можу зрозуміти, що робити.


4
Якщо ви впевнені, що ваш місцевий майстер має останні зміни, які ви хочете на дистанційному, то робіть git push --force
IgorGanapolsky

34
git push --force <remote_repository>працював на мене.
Сортування

@Sorter - У мене були цілі ж проблеми цілий день, це мені допомогло !! Дякую. Але це не дає пояснення, чому ця проблема сталася в першу чергу і чому виправлення спрацювало.
Падаван

1
@pmr, просто прискіпливо запитаючи, чи ОП "прочитати повідомлення про помилку" взагалі не допомагає. Очевидно, повідомлення про помилку не мало жодного сенсу для ОП, так само як воно не дало жодного повідомлення ні мені, ні іншим 66 людям, які підтримали його посаду. Хитрий, дотепніший, ніж хоч і зовсім не допомагає людям.
Падаван

3
@Padawan Ви також помітите, що цей "химерний, дотепніший, ніж людина" дав прийняту відповідь на це питання, і 72 особи (напевно, включаючи вас) вважали це корисним. Мені шкода, що мій коментар сприйняв зарозумілість, але це було б моє перше питання, якби ви мені це питання задали і в професійному контексті. Іноді зупинка і хвилина, щоб уважно прочитати повідомлення про помилку, іноді творить чудеса. Я зробив для мене, коли побачив цю помилку вперше.
pmr

Відповіді:


160

Як випливає з повідомлення про помилку: git pullперед тим, як спробувати git push. Мабуть, ваша локальна філія не синхронізована з вашою гілкою відстеження.

Залежно від правил проекту та вашого робочого процесу ви також можете використовувати git pull --rebase.


1
він показує мені це автоматичне злиття README.md Автоматичне злиття не вдалося; виправити конфлікти, а потім здійснити результат.
Asantoya17

1
@ Asantoya17 Зміни, які були зроблені на віддаленому майстрі, суперечать вашим змінам. Перегляньте файл і перегляньте їх. Потім здійснюють результати вирішення. Будь ласка, отримайте підручник або книгу або принаймні прочитайте повідомлення.
пмр

1
Що означає тягнення? Чи дозволяє вам надіслати файл або отримати та завантажити файл з веб-сайту сховища? (наприклад, біт-
ковш

4
@AndrewS git push --force origin master. Якщо ви стикаєтеся з подібними проблемами не раз у своєму житті, процес роботи над проектом буде порушений. Особливості слід розвивати в гілках і об'єднувати без швидкого переадресації, і якщо функція "не вдалася", вам слід скасувати злиття (бажано спершу виконати тестування в гілці інтеграції, перш ніж об'єднати функцію в майстер). Поняття про затемнення не маю.
pmr

1
Що робити, якщо ця помилка повідомляє git pull origin trunk:master?
Андрі

175

УВАГА: Це ніколи не рекомендується використовувати git. Це змінить зміни на пульті. Зробіть це, лише якщо ви знаєте на 100%, що ваші локальні зміни повинні бути спрямовані на віддалений майстер.

Спробуйте це: git push -f origin master


47
Ні, не намагайся цього. З git help push: "Це може призвести до втрати віддаленого сховища комісій; використовуйте його обережно."
jcsahnwaldt Reinstate Monica

7
точно не робіть цього
Lluís

14
це працювало для мене. Я подумав, що це нормально, тому що мій єдиний комітет щодо github був створений з новим репо. Можливо, гарна ідея не використовувати його після початку проекту.
Меттью Мур

1
може бути корисним, якщо ви хочете оновити репо, створену з метою доставки (тому ніяких змін на віддаленій стороні немає)
HiB

Я просто використав це, коли я лише взяв на себе зобов’язання, синхронізувався з GitHub, а потім побажав, щоб я додав ще один файл до цього комітету. Тому я скасував її локально, виконав вищевказану команду, щоб очистити її від GitHub, потім знову здійснив локально, а потім синхронізував. Все добре зараз! Зауважте, я фактично знав, що жодних інших зобов’язань у цій галузі не було зроблено.
zeMinimalist

18

ця команда добре працювала для мене

git push -f origin master

3
Будьте обережні, перш ніж використовувати цю команду. Використовуючи цю команду, ви втратите всі свої минулі зобов'язання.
twenk11k

чи означає -f середній натиск
maheshmnj

@maheshmnj Так!
тестувальник

15

Я щойно отримав цю помилку.

Я створив сховище github після створення свого локального сховища git, тому мені потрібно було прийняти зміни до локальних, перш ніж натискати на github. У цьому випадку єдиною зміною був файл readme, створений як необов'язковий крок під час створення сховища github.

git pull https://github.com/*username*/*repository*.git master

URL-адресу сховища отримано звідси на сторінці github проекту:

введіть тут опис зображення

Потім я повторно ініціалізую (це може не знадобитися)

git init
git add .
git commit -m "update"

Потім натисніть:

git push

3
Ця відповідь відображає фактичний сценарій випадку.
kta

9

Я створив нове репо в github, і у мене була така ж проблема, але у нього також були проблеми під час витягування, тому це працювало для мене.

але це не рекомендується в репостах, які вже мають багато кодів, оскільки це може зіпсувати все

git push origin master --force

Ця відповідь вже дана: stackoverflow.com/a/16374574/1771479 , і не радиться робити.
agold

9

УВАГА:

Йти на ' git pull' НЕ ЗАВЖДИ є рішенням, тому будьте обережні. Ви можете зіткнутися з цією проблемою (тією, яка згадується у Q), якщо ви навмисно змінили історію сховища. У цьому випадку git плутає зміни вашої історії з новими змінами у віддаленому репо. Тож вам слід попросити git push --force, бо виклик git pullнавмисно скасує всі внесені вами зміни в історію.


8

Якщо git pullце не допомагає, то, ймовірно, ви підштовхнули свої зміни (A) і після цього ввели git commit --amendще кілька змін (B). Тому git вважає, що ви можете втратити історію - він трактує B як інший комітет, незважаючи на те, що він містить усі зміни від A.

             B
            /
        ---X---A

Якщо після Aцього ніхто не змінить репо , то можна зробити git push --force.

Однак якщо зміни відбулися Aвід іншої особи:

             B
            /
        ---X---A---C

тоді ви повинні переосмислити, що особи змінюються Aна B( C-> D).

             B---D
            /
        ---X---A---C

або виправити проблему вручну. Я ще не думав, як це зробити.


7

використовувати цю команду:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

подібно до:

git pull --allow-unrelated-histories origin master

ця помилка виникає, коли проекти не мають спільного предка.


7
git push -f origin master

використовуйте грубу силу ;-) Швидше за все, ви намагаєтеся додати локальну папку, яку ви створили перед створенням репо на git.


2
Будь-яка відповідь, включаючи цю, повинна попереджати.
D. Ben Knoble

1
Я спробував це, і це коштувало мені багато комісій на GitHub, які мені довелося відновити з іншого місцевого клону репо. Небезпечний.
Paflow

6

Це тому, що ви внесли деякі зміни у свого майстра, тому проект попросив вас вийти першим. Якщо ви все одно хочете натиснути його, ви можете застосувати грубу силу, ввівши це:

git push -f origin master

Не забудьте спочатку здійснити зміни:

git add .
git commit -m "Your commit message"


4

Вам потрібно зробити

git branch

якщо вихід є чимось на кшталт:

* (no branch)
master

то зробіть

git checkout master

Переконайтеся, що у вас немає жодних відкладених зобов’язань, оскільки виїзд втратить усі незавершені зміни.


4

! [відхилено] master -> master (не швидкий вперед)

Не панікуйте, це надзвичайно просто виправити. Все, що вам потрібно зробити, - це здійснити тягнення, і ваша філія буде швидко просуватися вперед:

$ git тягнути майрепо майстра

Потім спробуйте натиснути, і все повинно бути добре:

$ git push github master


4

Це трапилось зі мною, коли я був у розгалуженні, і моя головна гілка не з останнім оновленням.

Тож, коли я намагався натиснути git push від розробки гілки, у мене виникла помилка.

Я виправив це, перейшовши на головну гілку, git pull, потім повернусь, щоб розвинути гілку та git push.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

У мене була ця проблема на машині розвитку. devФілія штовхав штраф , але masterгілка дала мені ( в той час як git pushING , коли перебуваючи на devгілці):

! [rejected]        master -> master (non-fast-forward)

Тому я спробував:

git checkout master
git pull

Що дало мені:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Я дізнався, що відсутня головна галузь, .git/configі додав:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Згодом git pushтакож добре працював у devгалузі.


2

Мій пульт не синхронізувався з місцевим, тому це працювало для мене

git pull --rebase

і переконайтеся, що коли ви це зробите git pullзнову, це повинно сказати, що вже в курсі, і тепер ви готові підштовхнути до початку

припускаючи, що ви вже є git remote add origin remote repository URL

робити

`git push origin master`  

Скріншот говорить все це введіть тут опис зображення

Або ви можете це зробити

  1. git stash (зберігає роботу без роботи)
  2. git pull (синхронізуйте локальний та віддалений)
  3. git stash pop (повертай собі невмілі зміни)
  4. git push

1

У мене було те саме, що випуск. Я використовую Git Totoise. Клацніть правою кнопкою миші -> TotoiseGit -> Очистити. Тепер ви можете натиснути на Github. Зі мною добре працювало: D


1

Це тому, що ви внесли суперечливі зміни в його головний господар. І ваш сервер сховища не в змозі сказати вам це за допомогою цих слів, тому він робить цю помилку, оскільки справа не в тому, щоб він вирішував ці конфлікти для вас, тому він просить вас зробити це самостійно. Як?

1- git pull Це з’єднає ваш код із вашого сховища з вашим кодом майстра вашого сайту. Так показані конфлікти.

2- обробіть ці манулементе конфлікти.

3-

git push origin master

І престо, ваша проблема була вирішена.


0

Єдине, що мені вдалося вирішити цю проблему, було видалити локальну та git repo та створити те саме на обох кінцях. Наразі добре працює.


Я завжди зберігаю резервну копію свого git repo на Dropbox. Таким чином я не повинен видаляти локальне репо, я просто копіюю та вставляю відповідні каталоги з Dropbox, коли виникає ситуація.
ІгорГанапольський

0

Якщо хтось має цю помилку під час спроби натиснути на heroku, просто замініть "origin" на "heroku", як це: git push -f heroku master



0

Це також може бути спричинене через деяку помилку імені, спричинену під час надання імені Repo. Якщо будь-який із перерахованих вище відповідей не спрацював. Це працювало для мене:

Видаліть цю репортаж і створіть нову та спробуйте наступні команди ще раз:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

якщо додавання початкових кодів вже існує, скористайтеся цим:

git remote set-url origin *your_git_name.git*
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.