Co to znaczy, gdy git mówi, że plik „wymaga aktualizacji”?


156

Przez całe życie nie mogę znaleźć żadnego przyzwoitego wyjaśnienia komunikatu „[plik]: wymaga aktualizacji”, który czasami wypluwa gita. Nawet oficjalne FAQ gita wyjaśnia to jako TODO. Gdyby ktoś mógł wyjaśnić A) co to znaczy; i B) jak to naprawić, byłbym niezmiernie wdzięczny.


1
Dobre pytanie, jak powiedziałeś, nawet GitFaq nie ma odpowiedzi: git.wiki.kernel.org/index.php/…
— Justin Ethier


1
Czy możesz dokładnie powiedzieć, które polecenie to powoduje? A która wersja Gita? Próbowałem usunąć je z interfejsu użytkownika, więc niedawny Git nie powinien ci tego mówić, z wyjątkiem miejsc, o których zapomniałem ;-).
— Matthieu Moy

Odpowiedzi:


108

Oznacza to, że próbujesz scalić zmiany skądś, ale zmiany obejmują modyfikacje pliku, który jest brudny (obecnie zmodyfikowany w drzewie roboczym). Musisz zatwierdzić swoje zaległe zmiany lub ukryć je, wyciągnąć / ponownie bazować / scalić / cokolwiek robisz, aby zaktualizować i rozpakować


4
To właściwie nie jest przyciąganie - to scalanie jest częścią przyciągania. Zobaczysz ten sam błąd, jeśli spróbujesz scalić lokalny oddział z tym samym problemem i myślę, że inne operacje scalania (zastosuj, ukryj zastosuj ...) wyświetlają podobne błędy, jeśli nie ten sam.
— Cascabel

Ach, dzięki. To naprawdę ma sens. Wydaje mi się, że muszę się upewnić, że zatwierdzę zmiany przed wyewidencjonowaniem innej gałęzi.
— rofrankel

7
Na wypadek, gdyby pomogło to w wynikach wyszukiwania, napotkałem ten problem, próbując zrobić git svn rebasez brudną kopią roboczą. Stash save, rebase, stash pop i wszystko było w porządku ze światem.
— Adam Tuttle

1
Sam plik nie może zostać zmieniony - może to spowodować nawet zmiana atrybutów pliku (takich jak uprawnienia).
— chiborg,

22

Jak zauważyli inni, komunikat o aktualizacjach potrzeb oznacza, że ​​plik jest brudny lub, innymi słowy, nieaktualny. Ale zamiast robić reset i zaczynać wszystko od nowa, można zrobić po prostu, git statusa następnie git add <file> czy znajduje się na zmienionej liście. Ponieważ mogłeś już wcześniej dodać plik, ale potem go zmieniłeś. To mi się przydarzyło i dzięki temu prostemu addrozwiązałem problem.


7

Zaloguj się do serwera produkcyjnego / docelowego, cddo katalogu zawierającego aplikację i wykonaj te dwie komendy.

1. Zresetuj do najnowszej wersji

OSTRZEŻENIE, spowoduje to usunięcie wszystkich zmian:

git reset --hard HEAD

2. Wyciągnij zmiany

git pull origin master


1
[git reset --hard HEAD] działało dla mnie. Zatwierdziłem z dysku współdzielonego Windows, ale mój katalog Ubuntu nie odzwierciedlałby zatwierdzonego przeze mnie zatwierdzenia, mimo że był to ten sam folder (Z: zmapowany do / var / www / html /). Po uruchomieniu tego, [git status] i [git pull] teraz pokazują, że jest aktualny.
— Keith DC,

To jest rozwiązanie, które też się sprawdziło. Próbowałem użyć poddrzewa git, używając SourceTree w systemie Windows, ale źle się zepsuło.
— Artem Russakovskii

3

Jak mówi odpowiedź na inne pytanie, do którego prowadzi łącze, wiadomość oznacza po prostu, że masz zaległe zmiany. Otrzymujesz to również, np. Jeśli wprowadzisz pewne zmiany za pomocą git add, a następnie zmienisz zdanie i zrobisz git reset HEAD filez zamiarem rozpoczęcia od nowa.


2
git reset HEAD filepowoduje pojawienie się tego samego komunikatu
— ekspert

2

Ten błąd może wystąpić, gdy proces rebase wprowadza dodatkowe zmiany w plikach, których nie ma w gałęzi docelowej.

Dla mnie najtrudniejsza część była z .gitattributesplikiem w moim repozytorium. Nowy typ pliku binarnego został dodany w innej gałęzi, ale jego obsługa została wymuszona jako plik tekstowy. Gdy plik został pobrany z repozytorium przez git, wartości EOL (w rzeczywistości są to bajty wartości binarnej) zostały zastąpione - co spowodowało różnicę binarną.

Dodanie nowego wpisu do obsługi nowego typu pliku jako binarnego i ponowienie całego procesu rozwiązało problem.


1

W moim przypadku ciągle dostawałem

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

Miałem te pliki w swoim katalogu, ale w mojej obecnej gałęzi zostały zmienione. Więc żeby to naprawić, pobiegłem

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

i pozwoliło mi to kontynuować

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.