Що це означає, коли git каже, що файл "потребує оновлення"?


156

Я не можу за все життя знайти будь-якого пристойного пояснення повідомлення "[файл]: потребує оновлення", яке git час від часу випливає. Навіть в офіційному FAQ щодо пояснень це пояснюється як TODO. Якщо хтось міг би пояснити А) що це означає; і В) як це виправити, я був би надзвичайно вдячний.


1
Добре запитання, як ви сказали, навіть у GitFaq немає відповіді: git.wiki.kernel.org/index.php/…
Джастін Етьє

1
Ви можете побачити stackoverflow.com/questions/5367734 / ...

1
Чи можете ви точно сказати, яка команда виробляє це? І яка версія Git? Я намагався видалити їх із інтерфейсу користувача, тому нещодавно Git не повинен розповідати про це, крім випадків, де я забув ;-).
Матьє Мой

Відповіді:


108

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


4
Це насправді не тягнення - це злиття, яке є частиною потягу. Ви побачите ту саму помилку, якщо спробуєте об'єднати локальну гілку з тією ж проблемою, і я думаю, що інші операції об'єднання (застосувати, застосувати скриньки ...) друкують подібні помилки, якщо не одна і та ж.
Каскабель

Ах, дякую. Це насправді має сенс. Я думаю, що я повинен переконатися, що я вношу зміни, перш ніж перевірити іншу гілку.
rofrankel

7
Якщо це допомагає результатам пошуку, я також зіткнувся з цим питанням, намагаючись зробити git svn rebaseбрудну робочу копію. Збережіть сховище, перезавантажте, приховайте поп, і все було в порядку зі світом.
Адам Таттл

1
Сам файл може бути не змінено - це навіть може змінити атрибути файлу (наприклад, дозволи).
чиборг

22

Як зазначали інші, повідомлення про потребу оновлення означає, що файл забруднений або, іншими словами, застарів. Але замість того, щоб робити скидання і починати все заново, те, що можна зробити, це просто, git statusа потім, git add <file> якщо воно є в зміненому списку. Тому що ви вже могли додати файл раніше, але потім змінити його. Це сталося зі мною, і цим простим addя вирішив проблему.


7

Увійдіть у свій сервер виробництва / призначення, cdдо каталогу, що містить вашу програму, і виконайте ці дві команди.

1. Скиньте на останню версію

УВАГА! Це видалить усі ваші зміни:

git reset --hard HEAD

2. Витягніть зміни

git pull origin master


1
[git reset - Hard HEAD] працював на мене. Я взяв на себе диск із спільного накопичувача Windows, але мій каталог Ubuntu не відображав би зобов'язання, яке я тільки що здійснив, хоча це була та сама папка (Z: зіставлено в / var / www / html /). Після запуску цього пункту [статус git] та [git pull] тепер показали, що це оновлено.
Кіт DC

Це рішення, яке працювало і для мене. Я спробував використати піддерево git за допомогою SourceTree в Windows, і воно погано викрутилося в процесі.
Артем Русаковський

3

Як і у відповіді на пов'язане інше питання, повідомлення просто означає, що у вас є непогашені зміни. Ви також отримуєте це, наприклад, якщо запускаєте деякі зміниgit add , то передумайте і зробіть git reset HEAD fileз наміром почати все з початку.


2
git reset HEAD fileвикликає появу того ж повідомлення
експерт

2

Ця помилка може виникнути, коли процес перезавантаження внесе додаткові зміни у файли, які не є на цільовій гілці.

Для мене складна частина була .gitattributes файлом у моїй репо. Новий тип бінарного файлу додано в іншій гілці, але його обробка була вимушена як текстовий файл. Коли файл було завантажено з репо за допомогою git, EOL (це фактично двійкове значення байтів) було замінено - це призвело до бінарної різниці.

Додавання нового запису для обробки нового типу файлів як бінарного та повторного спробу всього процесу вирішило для мене проблему.


1

У моєму випадку я продовжував отримувати

assets/ElipseThree.png: needs update
You must edit all merge conflicts and then
mark them as resolved using git add

Я мав ці файли у своєму каталозі, але вони були перейменовані в мою нинішню гілку. Тож, щоб виправити, я побіг

$ git mv assets/ElipseThree.png assets/elipseThree.png
$ git add assets/elipseHalfFull.png 
$ git rebase --continue

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

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