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.

rofrankel
źródło
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ć

Michał Mrozek
źródło
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.

łomża
źródło
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

NXT
źródło
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.

tripleee
źródło
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.

pełnomocnik
źródło
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ć

ThinkDigital
źródło