У режимі за замовчуванням git pull - це скорочення для git fetch, за яким слідує git merge FETCH_HEAD.
Коли ви виконуєте a git pull origin master
,
git pull
виконує злиття, яке часто створює коміт злиття. Тому за замовчуванням витягування з пульта дистанційного керування НЕ є нешкідливою операцією: воно може створити нову фіксацію ша, яка раніше не існувала. Така поведінка може заплутати користувача, оскільки те, що здається нешкідливою операцією завантаження, насправді змінює історію комітів непередбачуваними способами.
Щоб цього уникнути, потрібно
git pull --ff-only
(чи ні? читайте далі, щоб побачити, який з них відповідає вашим потребам)
За допомогою git pull --ff-only
Git оновить вашу гілку лише в тому випадку, якщо її можна буде перемотувати вперед без створення нових комітів. Якщо цього зробити не вдається, git pull --ff-only
просто переривайте з повідомленням про помилку.
Ви можете налаштувати свій клієнт Git завжди використовувати --ff-only
за замовчуванням, тому ви отримуєте таку поведінку, навіть якщо забули прапор командного рядка:
git config --global pull.ff only
Примітка: --global
Прапор застосовує зміни до всіх сховищ на вашому комп'ютері. Якщо вам потрібна така поведінка лише для сховища, в якому ви перебуваєте, опустіть прапор.
Взято звідси
Це попередження було додано до Git 2.27, як зазначив Джо у своїй відповіді.
Ось як виглядає повне попередження:
Не рекомендується тягнути, не вказуючи, як узгодити різні гілки. Ви можете подавити це повідомлення, виконавши одну з наступних команд якось перед вашим наступним витягуванням:
git config pull.rebase false # merge (стратегія за замовчуванням)
git config pull.rebase true #
rebase git config pull.ff # тільки вперед
Ви можете замінити "git config" на "git config --global", щоб встановити налаштування за замовчуванням для всіх сховищ. Ви також можете передати --rebase, --no-rebase або --ff-only у командному рядку, щоб замінити налаштований за замовчуванням на виклик.
Попередження представляє три команди як опції, всі вони будуть придушувати попередження. Але вони служать різним цілям:
git config pull.rebase false # merge (the default strategy)
Це зберігає поведінку за замовчуванням і придушує попередження.
git config pull.rebase true # rebase
Це фактично фіксується поверх віддаленої гілки, зберігаючи одну гілку як локально, так і віддалено (на відміну від поведінки за замовчуванням, коли задіяні дві різні гілки - одна на локальній, а інша на віддаленій), і, щоб поєднати ці дві, виконується злиття ).
git config pull.ff only # fast-forward only
Це виконує лише витяг, якщо локальну гілку можна перемотати вперед. Якщо ні, він просто перериває з повідомленням про помилку (і не створює жодних комітів).
Оновлення:
Якщо у вас є Git 2.29
або вище, тепер ви можете встановити pull.ff
на false
, true
або only
позбутися від попередження.
git config pull.ff true
true
- Це поведінка за замовчуванням. Потягування, якщо це можливо, перемотується вперед, інакше воно зливається.
git config pull.ff false
false
- Pull ніколи не перемотується вперед, і завжди створюється злиття.
git config pull.ff only
only
- Потягнення перемотується вперед, якщо це можливо, інакше робота припиняється із повідомленням про помилку