Dlaczego polecenie „git commit” nie zapisuje moich zmian?


251

Zrobiłem coś git commit -m "message"takiego:

> git commit -m "save arezzo files"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Ale potem, kiedy to robię git status, pokazuje te same zmodyfikowane pliki:

> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Co ja robię źle?


16
Służy git commit -am "save arezzo files"do automatycznego dodawania wszystkich zmian (wrt .gitignore). Możesz dodać tylko określone pliki / katalogi:git add file.src
mbx

Odpowiedzi:


400

Jak głosi komunikat:

nie dodano żadnych zmian do zatwierdzenia (użyj „git add” i / lub „git commit -a”)

Git ma „obszar przejściowy”, w którym pliki muszą zostać dodane przed zatwierdzeniem, możesz przeczytać wyjaśnienie tego tutaj .


W twoim konkretnym przykładzie możesz użyć:

git commit -am "save arezzo files"

(zwróć uwagę na dodatkowe aw flagach, można również zapisać jako git commit -a -m "message"- oba robią to samo)

Alternatywnie, jeśli chcesz być bardziej selektywny w kwestii tego, co dodajesz do zatwierdzenia, użyj polecenia git add, aby dodać odpowiednie pliki do obszaru przejściowego, a status git, aby wyświetlić podgląd tego, co ma zostać dodane (pamiętając, aby zwrócić uwagę na użyte sformułowanie).

Możesz również znaleźć ogólną dokumentację i samouczki dotyczące korzystania z git na stronie dokumentacji git, która poda więcej szczegółów na temat koncepcji przemieszczania / dodawania plików.


Kolejną ważną rzeczą, o której warto wiedzieć, jest interaktywne przemieszczanie - pozwala to dodawać części pliku do obszaru przemieszczania, więc jeśli wprowadziłeś trzy różne zmiany kodu (dla pokrewnych, ale różnych funkcji), możesz użyć trybu interaktywnego, aby podzielić zmienia i dodaje / zatwierdza każdą część po kolei. Pomocne mogą być takie mniejsze określone zatwierdzenia.


@PeterBoughton miałeś na myśli „dodawanie interaktywne” zamiast „dodawanie interaktywne”?
djb,

3
Nie, miałem na myśli interaktywne dodawanie.
Peter Boughton,

2
Lokalne repozytorium jest rodzajem obszaru przejściowego przed wypchnięciem kodu do zdalnego repozytorium. Po co dodawać kolejną „warstwę” przed zatwierdzeniem zmian, czy nie jest to trochę skomplikowane? Jestem nowy w Git, ale wyobrażam sobie, że 99,99% programistów zawsze używa commit -am, ponieważ i tak zmiany nie wychodzą poza ich lokalne środowisko.
PawelRoman

2
Myślę, że właśnie na to wpadłem, bo jestem przyzwyczajony do tego, że IDE się tym zajmuje. Nie jestem pewien, dlaczego jest to konieczny krok, ale z drugiej strony jest wiele rzeczy o git, których nie rozumiem ... Mam na myśli git ...
trpt4him

49

Nie dodałeś zmian. Dodaj je specjalnie

git add filename1 filename2

lub dodaj wszystkie zmiany (ze ścieżki katalogu głównego projektu)

git add .

lub użyj skrótu -apodczas zatwierdzania:

git commit -a -m "message".

Ponadto zdecydowanie zachęcam użytkowników do korzystania z interaktywnego dodawania. Zwłaszcza, gdy próbujesz zrobić ładne małe zatwierdzenia, które można łatwo odwrócić.
jer

40

Powinieneś zrobić:

git commit . -m "save arezzo files"

4
To wydaje się być poprawną odpowiedzią na pytanie PO. Nie chciał „dodawać”, chciał zatwierdzić to, co zostało zmodyfikowane.
VectorVortec,

8

Skopiowałem mały podprojekt, który miałem pod kontrolą źródła Gita, do innego projektu i zapomniałem usunąć folder .git. Kiedy poszedłem zatwierdzić, dostałem ten sam komunikat jak powyżej i nie mogłem go wyczyścić, dopóki nie usunąłem .gitfolderu.

Jest to trochę głupie, ale warto sprawdzić, czy nie masz folderu .git w folderze, który się nie zatwierdza.


7

Mogłeś zrobić:

git add -u -n

Aby sprawdzić, które pliki zmodyfikowałeś i które zostaną dodane (suchobieg: opcja -n), a następnie

git add -u

Aby dodać tylko zmodyfikowane pliki


4

Uważam ten problem pojawiający się podczas Zrobiłem git add .w podkatalogu poniżej gdzie moje .gitignoreżycie plików (katalog domowy z mojego repozytorium, że tak powiem). Spróbuj zmienić katalogi na najwyższy katalog, a git add .następnie uruchom git commit -m "my commit message".


4

Może to oczywista rzecz, ale ...

Jeśli masz problem z indeksem, użyj git-gui . Bardzo dobrze widzisz, jak faktycznie działa indeks (obszar pomostowy).

Innym źródłem informacji, które pomogły mi zrozumieć indeks, był Scott Chacons „Getting Git” strona 259 i dalej.

Zacząłem od wiersza poleceń, ponieważ większość dokumentacji pokazuje tylko, że ...

Myślę, że git-gui i gitk sprawiają, że pracuję szybciej, i pozbyłem się złych nawyków, takich jak na przykład „git pull”… Teraz zawsze ściągam najpierw… Zobacz, jakie naprawdę są nowe zmiany, zanim się połączę.


3

Dzieje się tak dlatego, że masz folder, który jest już śledzony przez Git, w innym folderze, który jest również śledzony przez Git. Na przykład miałem projekt i dodałem do niego podfolder. Oba były śledzone przez Gita, zanim umieściłem jeden w drugim. Aby zatrzymać śledzenie tego w środku, znajdź go i usuń plik Git za pomocą:

rm -rf .git

W moim przypadku miałem aplikację WordPress, a folder, który dodałem, był motywem. Musiałem więc przejść do katalogu głównego motywu i usunąć plik Git, aby cały projekt był teraz śledzony przez rodzica, aplikację WordPress.


1

jeśli masz więcej plików w moim przypadku, mam 7000 plików graficznych, kiedy próbuję dodać je z folderu trasy projektu, nie dodał ich, ale kiedy idę do folderu obrazów, wszystko jest w porządku. Przejdź do folderu docelowego i wykonaj polecenia jak w okach

git add .
git commit -am "image uploading"
git push origin master

git push origin master Wyliczanie obiektów: 6574, gotowe. Liczenie obiektów: 100% (6574/6574), gotowe. Kompresja delta z użyciem maksymalnie 4 wątków Kompresowanie obiektów: 100% (6347/6347), gotowe. Pisanie przedmiotów: 28% (1850/6569), 142,17 MiB | 414,00 KiB / s


0

Miałem problem, w którym działałem commit --amendnawet po wydaniu git add .i nadal nie działało. Okazało się, że wprowadziłem kilka .vimrcdostosowań, a mój edytor nie działał poprawnie. Naprawienie tych błędów, tak aby vimzwracał prawidłowy kod, rozwiązało problem.


0

Miałem bardzo podobny problem z tym samym komunikatem o błędzie. „Zmiany nie są wystawiane dla zatwierdzenia”, ale kiedy robię diff, widać różnice. W końcu zorientowałem się, że jakiś czas temu zmieniłem skrzynkę katalogów. dawny. „PostgeSQL” na „postgresql”. Jak teraz pamiętam, git czasami zostawia plik lub dwa w starym katalogu sprawy. Następnie przekażesz nową wersję do nowej skrzynki.

Dlatego git nie wie, na którym polegać. Aby to rozwiązać, musiałem wejść na stronę github. Następnie możesz wyświetlić oba przypadki. Musisz usunąć wszystkie pliki z niepoprawnego katalogu ze skrzynkami. Upewnij się, że masz poprawną wersję zapisaną lub w odpowiednim katalogu z kopertami.

Po usunięciu wszystkich plików ze starego katalogu spraw cały katalog zniknie. Następnie wykonaj zatwierdzenie.

W tym momencie powinieneś być w stanie wykonać Pull na swoim komputerze lokalnym i nie widzieć już konfliktów. W ten sposób móc ponownie popełnić. :)


0

jeśli masz podfolder, który został sklonowany z innego repozytorium git, najpierw musisz usunąć plik $ .git $ z repozytorium podrzędnego: rm -rf .git następnie możesz przejść do folderu nadrzędnego i użyć go git add -A.

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.