webentwicklung-frage-antwort-db.com.de

Git: Add vs Push vs Commit

Was ist der Unterschied zwischen git add, Push und commit?

Nur ein wenig verwirrt von SVN, wo "update" Sachen "hinzufügt" und commit einen "Push" ausführt und auch "hinzufügt"

Es gibt verschiedene Funktionen in Git. Ich hoffe auf eine Erklärung aus deiner Erfahrung.

102
CQM
  1. git add Fügt Ihre geänderten Dateien zur Warteschlange hinzu , um sie später festzuschreiben . Dateien werden nicht festgeschrieben
  2. git commit Schreibt die hinzugefügten Dateien fest und erstellt eine neue Revision mit einem Protokoll ... Wenn Sie keine Dateien hinzufügen, schreibt git nichts fest. Sie können beide Aktionen mit git commit -a Kombinieren.

  3. git Push Überträgt Ihre Änderungen an das Remote-Repository.

Diese Zahl aus dieser Git-Spickzettel gibt einen guten Überblick über den Arbeitsablauf

enter image description here

git add Ist nicht in der Abbildung enthalten, da die vorgeschlagene Methode zum Festschreiben die Kombination git commit -a Ist. Sie können jedoch im Kopf ein git add Zum Änderungsblock hinzufügen, um den Ablauf zu verstehen.

Schließlich liegt der Grund, warum Push ein separater Befehl ist, in der Philosophie von git. git ist ein verteiltes Versionsverwaltungssystem und Ihr lokales Arbeitsverzeichnis ist Ihr Repository! Alle Änderungen, die Sie vornehmen, werden sofort wiedergegeben und aufgezeichnet. Push wird nur verwendet, um das Remote-Repo zu aktualisieren (das Sie möglicherweise mit anderen teilen), wenn Sie mit dem fertig sind, woran Sie gerade arbeiten. Dies ist eine gute Möglichkeit, Änderungen lokal zu speichern (ohne Netzwerk-Overhead) und nur dann zu aktualisieren, wenn Sie dies möchten, anstatt bei jedem Commit. Dies führt indirekt zu einfacheren Commits/Verzweigungen usw. (warum nicht, richtig? Was kostet es Sie?), Was zu mehr Speicherpunkten führt, ohne mit dem Repository in Konflikt zu geraten.

147
abcd

git add wählt Änderungen aus

git commit zeichnet Änderungen LOKAL auf

git Push teilt Änderungen

78
Dustin
  • git add fügt Dateien zum Git-Index hinzu. Dies ist ein Staging-Bereich für Objekte, die für das Commit vorbereitet sind.
  • git commit überträgt die Dateien im Index in das Repository, git commit -a ist eine Verknüpfung, mit der alle geänderten nachverfolgten Dateien zuerst zum Index hinzugefügt werden.
  • git Push sendet alle ausstehenden Änderungen an das Remote-Repository, dem Ihr Zweig zugeordnet ist (z. B. auf GitHub).

Um Git zu verstehen, müsste man sich mehr Mühe geben, als nur einen Blick in die Dokumentation zu werfen, aber es lohnt sich auf jeden Fall. Versuchen Sie einfach nicht, Git-Befehle direkt Subversion zuzuordnen, da die meisten von ihnen kein direktes Gegenstück haben.

22
Adam Byrtek

Ich war verwirrt darüber, was "add" wirklich tut. Ich habe gerade einen sehr aufschlussreichen Absatz aus dem Buch Git Pro gelesen, den ich hier hinzufügen möchte, weil er die Dinge klarer macht

„Es stellt sich heraus, dass Git eine Datei genau so bereitstellt, wie sie ist, wenn Sie den Befehl git add ausführen. Wenn Sie jetzt ein Commit durchführen, entspricht die Version von benchmarks.rb, die zum Zeitpunkt der letzten Ausführung des Befehls git add verwendet wurde, dem Ablauf des Commits und nicht der Version der Datei, die beim Ausführen von git commit in Ihrem Arbeitsverzeichnis angezeigt wird. Wenn Sie eine Datei nach dem Ausführen von git add ändern, müssen Sie git add erneut ausführen, um die neueste Version der Datei bereitzustellen: ”

Auszug aus: Chacon, Scott. "Pro Git." Springer, 2009-08-19T00: 00: 00 + 00: 00. iBooks. Dieses Material ist möglicherweise urheberrechtlich geschützt.

11
user2489252

add weist git an, eine Datei zu verfolgen.

commit schreibt Ihre aktuellen Änderungen in Ihrem lokalen Repository fest

Push schiebt Ihr lokales Repo stromaufwärts.

7
hvgotcodes

Sehr schön pdf über viele GIT-Geheimnisse.

Hinzufügen ist dasselbe wie Hinzufügen von svn (wie auch immer, manchmal wird es verwendet, um aufgelöste Dateien zu markieren).

Commit ist ebenfalls dasselbe wie svn, schreibt jedoch Änderungen in Ihr lokales Repository fest.

5
lord_t

Ich finde dieses Bild sehr aussagekräftig:

enter image description here

(von: Oliver Steele - My Git Workflow (2008) )

2
Malick