Що означає "Відхилено оновлення швидкого переходу в Git"?


153

Я використовую Git для управління двома комп’ютерами та моєю розробкою. Я намагаюся внести зміни до GitHub, і я отримую помилку.

Не вдалося надіслати деякі відгуки <repo>. Щоб уникнути втрати історії, оновлення, що не швидко передаються вперед, було відхилено. Об’єднайте віддалені зміни, перш ніж натиснути знову.

Що може бути причиною цього і як це можна виправити?

Редагувати:

Якщо витягнути репо, повертається наступне:

* ведучий відділення -> головний (не швидкий вперед) Вже оновлений

Натискання все ще дає мені згадану вище помилку.


Відповіді:


136

У GitHub є чудовий розділ, який називається " Робота з помилками " не швидкий вперед ".

Ця помилка спочатку може бути трохи переважною, не бійтеся.
Простіше кажучи, git не може внести зміни на пульт дистанційного керування без втрати комітетів, тому він відмовляється від натиску .
Зазвичай це викликано тим, що інший користувач натискає на ту саму гілку. Ви можете виправити це шляхом отримання та об’єднання віддаленої гілки або за допомогою функції "pull", щоб виконати обидва одночасно.

В інших випадках ця помилка є результатом деструктивних змін, зроблених локально за допомогою команд типу « git commit --amendабо» git rebase.
Хоча ви можете перекрити пульт, додавши --forceдо pushкоманди, ви повинні зробити це лише у тому випадку, якщо ви абсолютно впевнені, що це ви хочете зробити.
Силові натискання можуть спричинити проблеми для інших користувачів, які дістали віддалену гілку, і вважається поганою практикою. Коли ви сумніваєтесь, не натискайте .


Git не може вносити зміни на пульт дистанційного управління, як швидке злиття вперед, що ілюструє Visual Git Reference :

alt текст

Це не зовсім ваш випадок, але допомагає зрозуміти, що таке "швидкий рух вперед" (де HEADгалузь просто переміщується до нової більш нової фіксації).


" branch master->master (non-fast-forward) Already-up-to-date" Зазвичай для місцевих відділень, які не відстежують їх віддалену частину.
Ознайомтеся, наприклад, із таким запитанням " git pull - це актуально, але git push відхиляє нешвидкий рух вперед ".
Або дві гілки пов'язані між собою, але не погоджуючись зі своєю історією:
Дивіться " Нескінченна історія GIT - що я тут роблю неправильно? "

Це означає, що ваша підривна гілка та ваша віддалена гітка-гітка гілки нічого не домовляються.
Деяка зміна була підштовхнута / здійснена до тієї, якої немає в іншій.
Загоріться gitk --all, і це має дати зрозуміти, що пішло не так - шукайте «вилки» в історії.


53

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

git pull

перш ніж натиснути

Зрештою, "швидкий рух вперед" означає, що комірки можна застосовувати безпосередньо поверх робочого дерева, не вимагаючи злиття.


2
Це те, що працювало для мене! Я забув, що змінив readme.md на сайті сховища!
ryanwinchester

14

Швидке оновлення вперед - це лише те, що одна зміна однієї сторони відбувається після останньої фіксації на іншій стороні, тому не повинно бути ніяких об'єднань. Це означає, що вам потрібно об'єднати свої зміни, перш ніж ви зможете натиснути.


8

ви можете використовувати в цьому випадку силу при натисканні

git push origin master - сила


1
Це неправильно. загальне джерело github буде видалено та
натиснене

6

Ніколи не робіть git -fцього, pushоскільки це може призвести до наступних катастрофічних наслідків.

Вам просто потрібно зробити git pullмісцеве відділення.

Наприклад:

git pull origin 'your_local_branch'

а потім зробіть a git push


0

Потрібно об'єднати та вирішити, conflicts locallyперш ніж натиснути зміни на віддалений репо / вилку.

1) тягнути (витягувати і зливати)

$ git pull remote branch 

2) Натисніть на зміни

$ git push remote branch 

Тим не менш, у вас є швидкий вибір pushпримусового використання --forceопції, але слід уникати цього, оскільки це може призвести до втрати змін або погано впливати на інших учасників.

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