Не вдалося натиснути Git, "Нешвидкі оновлення вперед відхилено"


99

Я редагував свої сховища GIT через Git Online. Після того як я спробував підштовхнути зміни до свого локального коду, я отримав помилку:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

Як я можу це виправити?


Відповіді:


137

Спершу витягніть зміни:

git pull origin branch_name

1
Якщо це не вирішує вашу проблему, переконайтеся, що ви підштовхуєтесь до тієї ж гілки, що і та, на якій ви зараз працюєте. Перевірте, на якій гілці ви знаходитесь зі статусом "git".
afilina

1
Ця команда спрацювала на мене, проте я хотів би знати, чому це не так git pull:? Пульт дистанційного керування одно origin, так що на насправді працює: git pull origin. Чи не слід оновити всі гілки?
Карлен Кішмірян

83

Додайте - сили до свого командного рядка, якщо ви впевнені, що хочете натиснути. Наприклад, використання git push origin --force(я рекомендую командний рядок, оскільки ви знайдете набагато більшу підтримку від інших користувачів командного рядка. Крім того, це можливо неможливо із SmartGit.) Докладнішу інформацію див. На цьому веб-сайті: http://help.github.com/ пульти /


8
- сила вирішить ваші проблеми, але потенційно зашкодить іншим. Його слід використовувати лише з великою обережністю (і знаннями)
Scietbi

7
-1 тому, що змушувати натискання взагалі кажучи - жахлива ідея.
joshin4colours

6
+1, оскільки 5 людей погодилися з @ joshin4colours дати -1. Але хоча силове натискання - це не завжди найкраща ідея (що git дає зрозуміти, відмовляючись від вашого натиску), якби це була погана ідея у 100% часу, варіант не існував би. Пропозиція Метта тут, безумовно, може бути корисною для інших.
користувач1271772

2
Не соромтеся використовувати, --forceякщо ви єдиний, хто використовує цю гілку. Однак це не викликає проблем при обміні філії з іншими розробниками.
Роберт Брізіта

22

Перш ніж натиснути, зробіть потягнення за допомогою git-опції. Це дозволить отримати зміни, внесені вами в Інтернеті (за своїм походженням), і застосувати їх локально, а потім додати локальні зміни поверх нього.

git pull --rebase

Тепер ви можете натиснути на віддалений

git push 

Для отримання додаткової інформації подивіться пояснену базу даних Git та Розділ 3.6 Розгалуження Git - Rebasing .


2
У моєму випадку git pull --rebaseзакінчуєтьсяThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder

17

Я зіткнувся з тією ж помилкою, просто додайте до команди "--force" , вона працює

git push origin master --force

6
чи є наслідки для цього?
jayunit100

8
втрачаючи зобов’язання інших.
Джованні Торальдо

1
У мене була дивна ситуація, коли це саме те , що я хотів зробити ... видути вміст щойно створеної віддаленої ведучої гілки чимось новим. Це вирішило мою проблему. Хоча це не рішення для всіх, --forceможе бути корисним.
Бред

1
Я не думаю, що ця відповідь заслуговує на те, щоб 6 разів проголосували. Це правильне рішення наданої проблеми, однак автор міг би бути трохи більш описовим щодо обставин, навколо яких ця команда була б корисною. Якщо це варто згадати, оскільки варто було написати (функціональність для --force)
Aiden Strydom

5

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

Після

git branch branch_name --set-upstream-to=origin/branch_name
git pull

і вирішуючи конфлікти, що зливаються, я зміг підштовхнути.


Схоже, ви пропустили зміни у віддаленій гілці
озма

5

Ви можете додати до команди --force-with-lease , вона буде працювати.

git push --force-with-lease

--for є руйнівним, оскільки він безумовно перезаписує віддалене сховище з усім, що у вас є на місцевому рівні. Але - примусово з орендою гарантуйте, що ви не перезаписуєте чужі роботи.

Більше інформації тут .


1

(Одне) Рішення для Netbeans 7.1: Спробуйте тягнути. Можливо, це теж не вдасться. Тепер подивіться в журнали (вони зазвичай зараз відображаються в IDE). Є один / більше рядка:

"Не вдалося витягнути через цей файл:"

Знайдіть цей файл, видаліть його (зробіть резервну копію раніше). Зазвичай це файл .gitignore, тому код не буде видалений. Повторити поштовх. Зараз все повинно працювати нормально.


1

Використання --rebaseопції працювало для мене.

  • git pull <remote> <branch> --rebase

Потім натисніть на репо.

  • git push <remote> <branch>

Напр

git pull origin master --rebase

git push origin master


0

Я мав таку ж проблему. Я вирішив с

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>

3
OP заявляє про прискорення змін у місцевому коді. checkoutбуде замінено ці зміни або, принаймні, не включить їх у push.
трейдер

0

Це те, що працювало для мене. Його можна знайти в документації на git тут

Якщо ви знаходитесь у бажаній галузі, ви можете зробити це:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

0

Зустрівши ту саму проблему, щоб її вирішити, виконайте наступні gitкоманди.

  • git pull {url} --rebase
  • git push --set-upstream {url} master

Ви, мабуть, спершу створили сховище в github.


0

Іноді, відриваючись від твоїх покровів, ГЛАВА відривається. Ви можете перевірити це, ввівши команду:

git branch 
  • (HEAD відрізаний від 8790704)

    майстер

    розвиватися

Краще перейти до своєї філії та взяти свіжий потяг із відповідної гілки.

git checkout develop

git pull origin develop

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