Git: Add vs Push vs Commit

114

Was ist der Unterschied zwischen git add, pushund commit?

Nur ein wenig verwirrt von SVN, wo "Update" Sachen "hinzufügt" und Commit einen "Push" macht und auch "hinzufügt"

Es gibt alle verschiedenen Funktionen innerhalb von Git. Ich hoffe auf eine Erklärung aus Ihrer Erfahrung.

CQM
quelle
2
Schönes Buch über git
iruediger

Antworten:

162
  1. git addFügt Ihre geänderten Dateien zur Warteschlange hinzu , um sie später festzuschreiben . Dateien werden nicht festgeschrieben

  2. git commitÜbernimmt die hinzugefügten Dateien und erstellt eine neue Revision mit einem Protokoll. Wenn Sie keine Dateien hinzufügen, schreibt Git nichts fest. Sie können beide Aktionen mit kombinierengit commit -a

  3. git push Überträgt Ihre Änderungen in das Remote-Repository.

Diese Abbildung aus diesem Git-Spickzettel gibt einen guten Überblick über den Arbeitsablauf

Geben Sie hier die Bildbeschreibung ein

git addist nicht in der Abbildung enthalten, da die vorgeschlagene Art des Festschreibens die Kombination ist git commit -a, aber Sie können git adddem Änderungsblock mental ein hinzufügen , um den Ablauf zu verstehen.

Der Grund, warum pushes sich um einen separaten Befehl handelt, liegt in der gitPhilosophie. gitist ein verteiltes Versionsverwaltungssystem und Ihr lokales Arbeitsverzeichnis ist Ihr Repository! Alle von Ihnen festgeschriebenen Änderungen werden sofort wiedergegeben und aufgezeichnet. pushwird nur verwendet, um das Remote-Repo (das Sie möglicherweise mit anderen teilen) zu aktualisieren, wenn Sie mit dem fertig sind, woran Sie gerade arbeiten. Dies ist eine gute Möglichkeit, Änderungen lokal (ohne Netzwerk-Overhead) zu bearbeiten und zu speichern und sie nur zu aktualisieren, wenn Sie 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 das Repository zu beeinträchtigen.

A B C D
quelle
Wird Push lokal festgeschrieben und dann auf den Remote-Server übertragen, oder muss zuerst ein Commit ausgeführt werden, bevor die Arbeit auf das Remote-Repository übertragen wird?
Andrew S
2
Sie müssen zuerst ein Commit ("git commit") durchführen, das Ihr lokales Repository aktualisiert (auch bekannt als auf Ihrem lokalen Computer), und dann auf den Server ("git push") pushen, der das Remote-Repository aktualisiert (z. B. auf dem github-Server). )
Romain
Ich würde eine "mental add" -Funktion in Git lieben!
Junchen Liu
1
Es wird empfohlen, nicht nur häufig zu verpflichten, sondern auch häufig zu pushen. Dies schützt Ihre Arbeit, wenn Ihre Festplatte abstürzt.
CCC
85

git add wählt Änderungen aus

git commit zeichnet Änderungen LOKAL auf

git push teilt Änderungen

Dustin
quelle
22
  • git add Fügt dem Git-Index Dateien hinzu. Dies ist ein Staging-Bereich für Objekte, die zum Festschreiben vorbereitet sind.
  • git commitÜberschreibt die Dateien im Index in das Repository. Dies git commit -aist 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üssten Sie mehr Aufwand betreiben, als nur einen Blick auf 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.

Adam Byrtek
quelle
Jemand sollte den Unterschied zwischen lokalem und entferntem Github erklären. Was Sie in lokalen und remte haben. Dies ist der Schlüssel, den Sie finden müssen
Mehdi Amrollahi
11

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

„Es stellt sich heraus, dass Git eine Datei genau so inszeniert, wie sie ist, wenn Sie den Befehl git add ausführen. Wenn Sie jetzt ein Commit durchführen, wird in der Version von Benchmarks.rb, wie sie zum letzten Mal ausgeführt wurde, der Befehl git add in das Commit übernommen, nicht in die Version der Datei, wie sie in Ihrem Arbeitsverzeichnis angezeigt wird, wenn Sie git commit ausführen. 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.


quelle
7

add weist git an, eine Datei zu verfolgen.

Commit schreibt Ihre aktuellen Änderungen in Ihrem lokalen Repository fest

push schiebt dein lokales Repo stromaufwärts.

hvgotcodes
quelle
5

Sehr schönes PDF über viele GIT-Geheimnisse.

Add ist dasselbe wie svn's add (wie auch immer es manchmal verwendet wird, um aufgelöste Dateien zu markieren).

Das Festschreiben entspricht auch dem von svn, überträgt jedoch Änderungen in Ihr lokales Repository.

lord_t
quelle
2
Jetzt muss ich svn hinzufügen und festschreiben. Meine große Angst: Ihre Dokumente verweisen mich dann auf git add and commit. Und lord_t ist der Autor dieser Dokumente.
Eric
Der Fragesteller hatte Kenntnisse über SVN, daher nahm ich an, dass er die Befehle von svn kennt.
lord_t
0

add -in git wird verwendet, um git mitzuteilen, welche Dateien festgeschrieben werden sollen. Es legt Dateien im Staging-Bereich ab

Commit-In-Git wird verwendet, um Dateien auf dem lokalen Computer zu speichern, sodass wir unsere Commit-Dateien trotzdem wiederherstellen können, wenn wir Änderungen vornehmen oder sogar die Dateien löschen

push - Wenn wir unsere Dateien auf dem lokalen Computer festschreiben, können sie immer noch verloren gehen, wenn unser lokaler Computer verloren geht, beschädigt wird usw., um unsere Dateien zu schützen oder unsere Dateien freizugeben. Normalerweise möchten wir unsere Dateien auf einer Fernbedienung aufbewahren Repository wie Github. Um auf Remote-Repositorys zu sparen, verwenden wir Push

Beispiel Staging einer Datei mit dem Namen index.html git add index.html

Festschreiben einer Datei, die als git commit -m 'Name Ihres Commits' bereitgestellt wird

Pushing einer Datei an Github Git Push Origin Master

Herbert
quelle