Warum speichert 'git commit' meine Änderungen nicht?

251

Ich habe git commit -m "message"so etwas gemacht:

> 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")

Aber danach, wenn ich es tue git status, zeigt es die gleichen geänderten Dateien:

> 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")

Was mache ich falsch?

Arezzo
quelle
16
Verwenden git commit -am "save arezzo files"Sie diese Option, um alle Änderungen automatisch hinzuzufügen (wrt .gitignore). Möglicherweise möchten Sie nur bestimmte Dateien / Verzeichnisse hinzufügen:git add file.src
mbx

Antworten:

400

Wie die Nachricht sagt:

Keine Änderungen zum Festschreiben hinzugefügt (verwenden Sie "git add" und / oder "git commit -a")

Git hat einen "Staging-Bereich", in dem Dateien hinzugefügt werden müssen, bevor sie festgeschrieben werden. Eine Erklärung dazu finden Sie hier .


Für Ihr spezielles Beispiel können Sie Folgendes verwenden:

git commit -am "save arezzo files"

(Beachten Sie das Extra ain den Flags, kann auch geschrieben werden als git commit -a -m "message"- beide machen das gleiche)

Wenn Sie selektiver festlegen möchten, was Sie dem Commit hinzufügen möchten, verwenden Sie alternativ den Befehl git add , um die entsprechenden Dateien zum Staging-Bereich hinzuzufügen, und den git-Status, um eine Vorschau der hinzuzufügenden Elemente anzuzeigen (denken Sie daran, darauf zu achten der verwendete Wortlaut).

Auf der Git-Dokumentationsseite finden Sie auch allgemeine Dokumentationen und Tutorials zur Verwendung von Git, die detailliertere Informationen zum Konzept des Staging / Hinzufügens von Dateien enthalten.


Eine weitere wichtige Sache, die Sie kennen sollten, ist das interaktive Staging. Auf diese Weise können Sie dem Staging-Bereich Teile einer Datei hinzufügen. Wenn Sie also drei verschiedene Codeänderungen vorgenommen haben (für verwandte, aber unterschiedliche Funktionen), können Sie den interaktiven Modus zum Teilen des Staging-Bereichs verwenden Änderungen und Hinzufügen / Festschreiben jedes Teils der Reihe nach. Kleinere spezifische Commits wie dieses können hilfreich sein.

Peter Boughton
quelle
@PeterBoughton meinten Sie "interaktives Hinzufügen" statt "interaktives Hinzufügen"?
djb
3
Nein, ich meinte interaktives Hinzufügen.
Peter Boughton
2
Das lokale Repository ist eine Art Staging-Bereich, bevor Code in das Remote-Repository übertragen wird. Warum noch eine "Ebene" hinzufügen, bevor Änderungen vorgenommen werden, ist das nicht etwas zu kompliziert? Ich bin neu in Git, aber ich stelle mir vor, dass 99,99% der Entwickler immer commit -am verwenden, da die Änderungen ohnehin nicht außerhalb ihrer lokalen Umgebung liegen.
PawelRoman
2
Ich glaube, ich bin gerade darauf gestoßen, weil ich es gewohnt bin, dass meine IDE sich für mich darum kümmert. Ich bin mir nicht sicher, warum es ein notwendiger Schritt ist, aber
andererseits
49

Sie haben die Änderungen nicht hinzugefügt. Fügen Sie sie entweder speziell über hinzu

git add filename1 filename2

oder fügen Sie alle Änderungen hinzu (vom Stammpfad des Projekts)

git add .

oder verwenden Sie die Kurzschrift -abeim Festschreiben:

git commit -a -m "message".
Femaref
quelle
Darüber hinaus empfehle ich den Benutzern dringend, das interaktive Hinzufügen zu verwenden. Besonders wenn Sie versuchen, nette kleine Commits zu machen, die leicht umkehrbar sind.
jer
40

Du solltest tun:

git commit . -m "save arezzo files"
Baptiste Pernet
quelle
4
Dies scheint die richtige Antwort auf die Frage des OP zu sein. Er wollte nicht "hinzufügen", er wollte festlegen, was geändert wurde.
VectorVortec
8

Ich habe ein kleines Unterprojekt, das ich unter Git-Quellcodeverwaltung hatte, in ein anderes Projekt kopiert und vergessen, den Ordner .git zu löschen. Als ich zum Festschreiben ging, erhielt ich die gleiche Nachricht wie oben und konnte sie erst löschen, nachdem ich den .gitOrdner gelöscht hatte .

Es ist ein bisschen albern, aber es lohnt sich zu überprüfen, ob Sie keinen .git-Ordner unter dem Ordner haben, der nicht festgeschrieben wird.

Simon Hutchison
quelle
7

Du hättest Folgendes tun können:

git add -u -n

Um zu überprüfen, welche Dateien Sie geändert haben und hinzugefügt werden sollen (Trockenlauf: Option -n), und dann

git add -u

Nur geänderte Dateien hinzufügen

Albert Vonpupp
quelle
4

Ich finde dieses Problem, wenn ich ein git add .in einem Unterverzeichnis unten ausgeführt habe, in dem sich meine .gitignoreDatei befindet (sozusagen das Home-Verzeichnis meines Repositorys). Versuchen Sie, die Verzeichnisse in Ihr oberstes Verzeichnis zu ändern und git add .anschließend auszuführen git commit -m "my commit message".

jam99
quelle
4

Vielleicht eine offensichtliche Sache, aber ...

Wenn Sie Probleme mit dem Index haben, verwenden Sie git-gui . Sie erhalten eine sehr gute Übersicht darüber, wie der Index (Staging-Bereich) tatsächlich funktioniert.

Eine weitere Informationsquelle, die mir geholfen hat, den Index zu verstehen, war Scott Chacons "Getting Git" Seite 259 und weiter.

Ich habe angefangen, die Befehlszeile zu verwenden, weil die meisten Dokumentationen nur zeigten, dass ...

Ich denke, Git-GUI und Gitk bringen mich tatsächlich dazu, schneller zu arbeiten, und ich habe schlechte Gewohnheiten wie "Git Pull" zum Beispiel beseitigt ... Jetzt hole ich immer zuerst ... Sehen Sie, was die neuen Änderungen wirklich sind, bevor ich sie zusammenführe.

Martin
quelle
3

Der Grund dafür ist, dass Sie einen Ordner, der bereits von Git verfolgt wird, in einem anderen Ordner haben, der ebenfalls von Git verfolgt wird. Zum Beispiel hatte ich ein Projekt und habe ihm einen Unterordner hinzugefügt. Beide wurden von Git verfolgt, bevor ich sie ineinander steckte. Um die Verfolgung der darin befindlichen Datei zu beenden, suchen Sie sie und entfernen Sie die Git-Datei mit:

rm -rf .git

In meinem Fall hatte ich eine WordPress-Anwendung und der Ordner, den ich hinzugefügt habe, war ein Thema. Also musste ich zum Theme-Stammverzeichnis gehen und die Git-Datei entfernen, damit das gesamte Projekt nun von der übergeordneten WordPress-Anwendung verfolgt wurde.

drjorgepolanco
quelle
1

Wenn Sie in meinem Fall mehr Dateien haben, habe ich 7000 Bilddateien, wenn ich versuche, sie aus dem Routenordner des Projekts hinzuzufügen. Es wurden sie nicht hinzugefügt , aber wenn ich in den Bildordner gehe, ist alles in Ordnung. Gehen Sie durch den Zielordner und befehlen Sie wie oben

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

git push origin master Objekte auflisten: 6574, fertig. Objekte zählen: 100% (6574/6574), fertig. Delta-Komprimierung mit bis zu 4 Threads Komprimieren von Objekten: 100% (6347/6347), abgeschlossen. Schreibobjekte: 28% (1850/6569), 142,17 MiB | 414,00 KiB / s


quelle
0

Ich hatte ein Problem, bei dem ich es commit --amendauch nach der Ausgabe eines tat , git add .und es funktionierte immer noch nicht. Es stellte sich heraus, dass ich einige .vimrcAnpassungen vorgenommen habe und mein Editor nicht richtig funktioniert hat. vimDas Problem wurde behoben , indem diese Fehler behoben wurden , sodass der richtige Code zurückgegeben wurde.

Brennan Cheung
quelle
0

Ich hatte ein sehr ähnliches Problem mit derselben Fehlermeldung. "Änderungen, die nicht für das Festschreiben bereitgestellt wurden", aber wenn ich einen Unterschied mache, werden Unterschiede angezeigt. Ich fand schließlich heraus, dass ich vor einiger Zeit einen Verzeichnisfall geändert hatte. Ex. "PostgeSQL" bis "postgresql". Wie ich mich jetzt erinnere, hinterlässt git manchmal ein oder zwei Dateien im alten Fallverzeichnis. Dann legen Sie eine neue Version für den neuen Fall fest.

Daher weiß Git nicht, auf wen man sich verlassen soll. Um das Problem zu beheben, musste ich auf die Website des Githubs gehen. Dann können Sie beide Fälle anzeigen. Und Sie müssen alle Dateien im falschen Verzeichnis löschen. Stellen Sie sicher, dass Sie die richtige Version gespeichert haben oder sich im richtigen Gehäuse befinden.

Sobald Sie alle Dateien im alten Fallverzeichnis gelöscht haben, verschwindet das gesamte Verzeichnis. Dann machen Sie ein Commit.

Zu diesem Zeitpunkt sollten Sie in der Lage sein, einen Pull auf Ihrem lokalen Computer durchzuführen und die Konflikte nicht mehr zu sehen. So kann man sich wieder festlegen. :) :)

Brianwaganer
quelle
0

Wenn Sie einen Unterordner haben, der aus einem anderen Git-Repository geklont wurde, müssen Sie zuerst die Datei $ .git $ aus dem Child-Repository entfernen. Danach rm -rf .git können Sie in den übergeordneten Ordner wechseln und verwenden git add -A.

Sam Toorchi
quelle