Egit відхилено без перемотування вперед


89

Я отримую це повідомлення, натискаючи на репозиторій github. Чи можете ви сказати мені поетапну процедуру виправлення? Я натиснув лише один раз, і це вдало. Але коли я оновив проект і спробував проштовхнути свій другий коміт, він показує "майстер відхилений не вперед" і не дозволяє мені натиснути. Будь ласка, поясніть процедуру.


Я отримав ту ж проблему після створення нового репо з "Ініціалізацією цього сховища за допомогою README". Я вилучив його та створив знову без цього чекбокса.
andrew

@andrew має рацію
Dany

Відповіді:


226

У мене була така сама проблема, і я зміг її виправити. afk5min мав рацію, проблема в тому, що гілка, з якої ви витягли код, змінилася на віддаленому сховищі. Відповідно до стандартних практик git ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ), вам потрібно (зараз) об’єднати ці зміни у віддаленому сховищі у ваші локальні зміни, перш ніж може здійснити. Це має сенс, це змушує вас приймати інші зміни та об’єднувати їх у свій код, гарантуючи, що ваш код продовжить функціонувати разом з іншими змінами на місці.

У всякому разі, на сходинках.

  1. Налаштуйте 'отримати', щоб отримати гілку, з якої Ви спочатку витягли.

  2. Завантажте віддалену гілку.

  3. Об’єднайте цю віддалену гілку з локальною гілкою.

  4. Зафіксуйте зміну (злиття) у вашому локальному репо.

  5. Перемістіть зміну до віддаленого репо.

Детально...

  1. У eclipse відкрийте подання 'Git Repositories'.

  2. Переконайтеся, що ви бачите локальне сховище та можете бачити віддалене сховище як підпапку. У моїй версії це називається Remotes, і тоді я бачу віддалений проект всередині цього.

  3. Шукайте зелену стрілку, що вказує ліворуч, це стрілка "отримати". Клацніть правою кнопкою миші та виберіть "Налаштувати вибірку".

  4. Ви повинні побачити URI, переконайтесь, що він вказує на віддалене сховище.

  5. Подивіться на розділ відображення посилань у спливаючому вікні. Моя була порожня. Це вкаже, які віддалені посилання ви хочете отримати. Клацніть «Додати».

  6. Введіть ім'я гілки, яку потрібно отримати з віддаленого сховища. Мій був "майстром" (до речі, випадаюче меню тут було б чудовим !!, наразі його потрібно ввести). Продовжуйте через спливаюче вікно, зрештою натискаючи "Готово".

  7. Клацніть на "Зберегти та отримати". Це призведе до віддаленого посилання.

  8. Загляньте в папку "Відділення" вашого локального сховища. Тепер ви повинні побачити цю віддалену гілку у віддаленій папці. Знову ж я бачу "господаря".

  9. Клацніть правою кнопкою миші на локальній гілці у папці 'Local' у папці 'Branches', яка називається "master". Виберіть 'Merge', а потім виберіть віддалену гілку, яка називається 'origin / master'.

  10. Процес злиття.

  11. Зафіксуйте будь-які зміни у своєму локальному сховищі.

  12. Внесіть зміни до віддаленого сховища.

  13. Ідіть смачно випити, вітаючи себе. Решту дня візьміть на вихідний.


7
Це слід позначити як відповідь. Працював як оберіг. Ця проблема виникає, хоча я не додав жодних файлів (звичайний README-файл) під час створення репозиторію на GitHub для мого проекту в Eclipse. Щиро дякуємо за просте покрокове пояснення.
rbaleksandar

Ця проблема зайняла мене рік, щоб розібратися, поки я не прочитав ваш пост. У моєму випадку у мене не було пульта дистанційного керування, але Eclipse створив за замовчуванням такий, що називається 'origin'.
Євген ван дер Мерве

Солодко, нарешті я можу злитися з Eclipse. Ключовим моментом тут є використання представлення Git Repositories для злиття, а не звичайне представлення Team Synchronize. Було б непогано, якби в командному режимі синхронізації eGit міг відключити всі параметри, які нічого не роблять.
dan carter

1
Хоча це працює, воно створює непотрібний коміт злиття. Тут слід використовувати rebase, що чудово, оскільки ваші зміни є лише локальними, тому ви не змінюєте жодної опублікованої історії (і якщо б ви це зробили, git все одно кричав би на вас, щоб не рухатись вперед). Мені подобається відповідь MYN.
nyuszika7h

1
Клацніть правою кнопкою миші на проекті, а потім Mergeу push branch Master
майстрі,

17

У моєму випадку я встановив Force Updateпрапорець під час натискання. Це спрацювало як шарм.


Це спрацювало і у мене. У мене був стан OP після "внесення змін" до коміту. І вибір дав мені "нічого взяти"
Twilite

11

Тим часом (поки ви оновлювали свій проект) до гілки "master" було зроблено інші коміти. Отже, спочатку потрібно здійснити ці зміни, щоб мати можливість здійснити зміни.


4
в цьому випадку git досить дурний, я переніс усі зміни на пульт. і я єдина робота над проектом. Чому, богу, мені потрібно натиснути на пульт, перш ніж я зможу знову натиснути ???? витягнута зміна відбуватиметься від мого місцевого
жителя

7

Застосовується для Eclipse Luna + Eclipse Git 3.6.1

Я,

  1. клоноване сховище git
  2. внесли деякі зміни у вихідний код
  3. поетапні зміни з Git Staging View
  4. нарешті, фіксуй і натискай!

І я зіткнувся з цією проблемою з EGit, і ось як я це виправив ..

Так, хтось вніс зміни до того, як я вніс свої зміни. Тож зміни відхиляються. Після цієї помилки зміни фактично передаються локальному сховищу. Я не хотів просто Pullвносити зміни, бо хотів зберегти, linear historyяк зазначено в - У яких випадках `git pull` може бути шкідливим?

Отже, я виконав наступні кроки

  1. з точки зору сховища Git, клацніть правою кнопкою миші на відповідний
    проект Git
  2. select Fetch from Upstream- він отримує віддалені оновлення (посилання та об'єкти), але локальні оновлення не виконуються. для отримання додаткової інформації див. Яка різниця між "git pull" і "git fetch"?
  3. select Rebase...- це відкриває спливаюче вікно, клацніть Preserve merges during rebaseподивитися, чому
    саме робить git "rebase --preserve-merges" (і чому?)
  4. натисніть на Rebase button
  5. якщо є / є a conflict(s), перейдіть до кроку 6, ще крок 11
  6. з'явиться Rebase Resultспливаюче вікно, просто натисніть наOK
  7. file comparatorвідкриється, вам потрібно змінити left side file.
  8. як тільки ви закінчите з об’єднанням змін правильно, перейдіть до Git Stagingперегляду
  9. stage the changes. тобтоadd to index
  10. на тому ж поданні натисніть Rebase-> Continue. повторюйте 7-10, поки всі конфлікти не будуть вирішені.
  11. з Historyподання виберіть рядок коміту та виберітьPush Commit
  12. встановіть Rebase Commits of local.......прапорець і натисніть далі. посилання чому - Git: перебазувати на гілку розвитку з вищого напрямку
  13. натисніть на Finish

Примітка: якщо у вас є кілька комітів місцевого сховища, вам потрібно стиснути їх за один коміт, щоб уникнути кількох об’єднань.


Я погоджуюсь із використанням rebase замість злиття. Краще, оскільки це не створює зайвого коміту злиття. (Не за темою: Переповнення стеку є абсолютно смішним і відхиляє мій коментар виключно на основі того факту, що я спочатку написав "+1 за". Мій коментар є цілком конструктивним, дякую.)
nyuszika7h

4

Налаштувати Після натискання коду при отриманні відхиленого повідомлення натисніть кнопку налаштування та натисніть Додати специфікацію, як показано на цьому малюнку

Посилання на джерело та призначення Випадаюче меню та клацніть на ref / heads / yourbranchname та ще раз натисніть Add Spec

введіть тут опис зображення Переконайтеся, що ви вибрали оновлення сили

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


3

Відкрити подання git:

1 - виберіть свій проект та об’єднайте 2 - Виберіть віддалене відстеження 3 - клацніть добре

Git об'єднає віддалену гілку з локальним сховищем

4- потім натисніть


2

Ця помилка означає, що віддалений репозиторій мав інші коміти і рухався попереду вашої локальної гілки.
Я намагаюся зробити git pull, за яким слідує git push. Якщо це не суперечливі зміни, git pull отримує останній код до моєї локальної гілки, зберігаючи мої зміни в цілості.
Тоді git push штовхає мої зміни до головної гілки.


здається, багатьом людям не вистачає цієї простої роздільної здатності: D
Чорний

0

Я виявив, що ви повинні брати участь у останньому коміті git. Ось такі кроки: 1) переконайтесь, що ви не працювали з одними і тими ж файлами, інакше ви зіткнетеся з помилкою DITY_WORK_TREE. 2) взяти останні зміни. 3) зафіксуйте свої оновлення.

Сподіваюся, це допомагає.


-1
  1. Зайдіть в Github і створіть репо для нового коду.
  2. Використовуйте нову URL-адресу https або ssh в Eclise, коли робите натиск на висхідний потік;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.