Was sind die Unterschiede zwischen "Git Commit" und "Git Push"?

895

In einem Git-Tutorial, das ich gerade durchlaufe, git commitwerden die von Ihnen vorgenommenen Änderungen gespeichert.

Wofür wird git pushdann verwendet?

ben
quelle
83
Sie können auch das "Git-Cheatsheet" lesen, das mir sehr geholfen hat, das Konzept zu verstehen: ndpsoftware.com/git-cheatsheet.html
adriendenat
Hier ist ein weiterer Spickzettel: atlassian.com/git/tutorials/atlassian-git-cheatsheet
Kolob Canyon
2
Keine Antwort, da sie bereits bereitgestellt wurde. nur eine Beobachtung. Mir scheint, ein Commit sollte wirklich als Speichern bezeichnet werden, und der Push sollte als Commit bezeichnet werden. Problem mit dem klassischen Benennungsszenario.
Dublinx

Antworten:

1619

Grundsätzlich git commit" zeichnet Änderungen am Repository auf ", während git push" Remote-Refs zusammen mit zugehörigen Objekten aktualisiert werden ". Das erste wird also in Verbindung mit Ihrem lokalen Repository verwendet, während das letztere für die Interaktion mit einem Remote-Repository verwendet wird.

Hier ist ein schönes Bild von Oliver Steele , das das Git-Modell und die Befehle erklärt:

Git-Datentransportbefehle

Lesen Sie mehr über git pushund git pullauf GitReady.com (der Artikel, auf den ich mich zuerst bezog)

Tanascius
quelle
20
Hier ist die Originalquelle: osteele.com/archives/2008/05/my-git-workflow mit einem weiteren Bild eines Git-Workflows
Tanascius
9
@ben github ist nur eine Lösung, um Ihr öffentliches "On-the-Cloud" -Repository zu hosten, mit dem Sie git pusharbeiten können. In Wirklichkeit das Ziel git pushkann jede Git Repository. Es kann sich auf Ihrer eigenen lokalen Festplatte in einem anderen Verzeichnis ( git remote add clone ~/proj/clone.git; git push clone masteroder git push ~/proj/clone.git masterzum Beispiel) oder in einem Git-Repository befinden, das Ihr eigener Host bedient.
Santa
2
Also ... müssen Sie zuerst pushen oder zuerst festschreiben?
Kokodoko
5
@Piet es beginnt an Ihrem Arbeitsbereich, wo Sie Dateien ändern. Dann fügen Sie sie dem Index hinzu, übertragen sie in das lokale Repository und schieben sie schließlich in das entfernte Repository
Tanascius
2
@ Mr.Hyde nein das ist nicht möglich. Für Git als verteilte Versionskontrolle benötigen Sie eine lokale Kopie.
Tanascius
215

Festschreiben : Hinzufügen von Änderungen zum lokalen Repository

push : um die letzten Commits auf einen Remote-Server zu übertragen

TheHippo
quelle
56

Im Grunde genommen speichert git commit Ihre Änderungen in Ihrem lokalen Repo, während git push Ihre Änderungen an den Remote-Standort sendet.

markovuksanovic
quelle
9
Dies ist mein zweiter Tag mit GIT. Wenn ich mir die Antworten oben ansehe, bekomme ich immer noch kein klares Bild, aber Ihre Antwort nagelt es einfach. Vielen Dank.
Bopha
1
Does git pushlädt die tatsächlichen aktualisierten Dateien oder eine spezielle „diff“ Datei?
Multigoodverse
27

git pushwird verwendet, um Commits, die Sie im lokalen Repository vorgenommen haben, zu einem Remote-Repository hinzuzufügen. Zusammen mit git pullermöglicht es den Mitarbeitern, zusammenzuarbeiten.

Michael Borgwardt
quelle
26

Da git ein verteiltes Versionskontrollsystem ist, besteht der Unterschied darin, dass durch das Festschreiben Änderungen an Ihrem lokalen Repository festgeschrieben werden, während durch das Drücken Änderungen an ein Remote-Repo übertragen werden.

Justin Ethier
quelle
19

Festschreiben : Snapshot | Änderungssatz | History_record | Version | 'Speichern unter' eines Repositorys. Git-Repository = Reihe (Baum) von Commits .

Lokales Repository: Repository auf Ihrem Computer.

Remote- Repository: Repository auf einem Server ( Github ).

git commit: Hängen Sie ein neues Commit (letztes Commit + bereitgestellte Änderungen) an das lokale Repository an. (Alle Commits werden in gespeichert /.git)

git push, git pull: Synchronisieren Sie das lokale Repository mit dem zugehörigen Remote- Repository. push- Änderungen von lokal auf remotepull anwenden , - Änderungen von remote auf lokal anwenden .

xged
quelle
11

git commitNotieren Sie Ihre Änderungen im lokalen Repository.

git push Aktualisieren Sie das Remote- Repository mit Ihren lokalen Änderungen.

Naresh
quelle
20
Ihre Antwort ist im Grunde identisch mit dieser Antwort , sie fügt nichts Neues hinzu.
7

Drei Dinge zu beachten:

1) Arbeitsverzeichnis ----- Ordner, in dem unsere Codedatei vorhanden ist

2) Lokales Repository ------ Dies befindet sich in unserem System. Wenn wir zum ersten Mal den Befehl COMMIT ausführen, wird dieses lokale Repository erstellt. An derselben Stelle, an der sich unser Arbeitsverzeichnis befindet, wird die
Checkit-Datei (.git) erstellt.
Wenn danach ein Commit durchgeführt wird, werden die Änderungen, die wir in der Datei des Arbeitsverzeichnisses vorgenommen haben, im lokalen Repository (.git) gespeichert.

3) Remote Repository ----- Dieses befindet sich außerhalb unseres Systems wie auf Servern auf der ganzen Welt. wie Github. Wenn wir den PUSH-Befehl ausführen, werden Codes aus unserem lokalen Repository in diesem Remote-Repository gespeichert

DEVINDER THAKUR
quelle
7

Ich möchte nur die folgenden Punkte hinzufügen:

Sie können nicht pushen, bis Sie ein Commit durchführen, da wir git pushCommits, die in Ihrem lokalen Zweig vorgenommen wurden, in ein Remote-Repository pushen.

Der git pushBefehl akzeptiert zwei Argumente:

Ein entfernter Name, z. B. origin Ein Filialname, z.master

Zum Beispiel:

git push  <REMOTENAME> <BRANCHNAME> 
git push  origin       master
Faisal Shaikh
quelle
4

Eine sehr grobe Analogie: Wenn wir mit git commitdem Speichern einer bearbeiteten Datei vergleichen , wird git pushdiese Datei an einen anderen Speicherort kopiert.

Bitte nehmen Sie diese Analogie nicht aus diesem Kontext heraus - Festschreiben und Pushing sind nicht ganz so, als würden Sie eine bearbeitete Datei speichern und kopieren. Das heißt, es sollte für Vergleiche gelten.

amn
quelle
1

Es ist einfacher, die Verwendung der git-Befehle zu verstehen, addund commitwenn Sie sich vorstellen, dass eine Protokolldatei in Ihrem Repository auf Github verwaltet wird. Die Protokolldatei eines typischen Projekts sieht für mich möglicherweise folgendermaßen aus:

---------------- Day 1 --------------------
Message: Completed Task A
Index of files changed: File1, File2

Message: Completed Task B
Index of files changed: File2, File3
-------------------------------------------

---------------- Day 2 --------------------
Message: Corrected typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on

Normalerweise beginne ich meinen Tag mit einer git pullAnfrage und beende ihn mit einer git pushAnfrage. Alles in einem Tagesbericht entspricht also dem, was zwischen ihnen passiert. Während eines jeden Tages erledige ich eine oder mehrere logische Aufgaben , bei denen einige Dateien geändert werden müssen. Die während dieser Aufgabe bearbeiteten Dateien werden in einem Index aufgelistet.

Jede dieser Unteraufgaben (Aufgabe A und Aufgabe B hier) sind individuelle Commits. Der git addBefehl fügt Dateien zur Liste "Index der geänderten Dateien" hinzu. Dieser Prozess wird auch als Staging bezeichnet und zeichnet in Wirklichkeit geänderte Dateien und die durchgeführten Änderungen auf. Der git commitBefehl zeichnet die Änderungen und die entsprechende Indexliste zusammen mit einer benutzerdefinierten Nachricht auf, die zur späteren Bezugnahme verwendet werden kann.

Denken Sie daran, dass Sie immer noch nur die lokale Kopie Ihres Repositorys ändern und nicht die auf Github. Danach werden nur dann, wenn Sie git pushalle diese aufgezeichneten Änderungen zusammen mit Ihren Indexdateien für jedes Commit ausführen, im Hauptrepository (auf Github) protokolliert.

Um beispielsweise den zweiten Eintrag in dieser imaginären Protokolldatei zu erhalten, hätte ich Folgendes getan:

git pull
# Make changes to File3 and File4
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Corrected typos'
git push

Kurz gesagt, git addund git commitSie können eine Änderung am Haupt-Repository in systematische logische Unteränderungen aufteilen. Wie andere Antworten und Kommentare gezeigt haben, gibt es natürlich noch viel mehr Verwendungszwecke. Dies ist jedoch eine der häufigsten Anwendungen und ein treibendes Prinzip hinter Git, da es sich im Gegensatz zu anderen gängigen Systemen wie Svn um ein mehrstufiges Revisionskontrollsystem handelt.

Cibin Joseph
quelle
0

Git Commit ist nichts anderes als das offizielle Speichern unserer Änderungen. Für jedes Commit, das wir Commit-Nachrichten senden, können wir es nach Abschluss der Commits auf Remote übertragen, um unsere Änderungen global zu sehen

Dies bedeutet, dass wir zahlreiche Commits ausführen können, bevor wir auf Remote übertragen (wir können die Liste der aufgetretenen Commits und auch die Nachrichten sehen). git speichert jedes Commit mit einer Commit-ID, die ein 40-stelliger Code ist

und ich benutze git push nur, wenn ich meine Änderung in remote sehen wollte (danach werde ich prüfen, ob mein Code in Jenkins funktioniert hat)

Sai Koti
quelle
-1

Im Grunde genommen speichert git commit Ihre Änderungen in Ihrem lokalen Repo, während git push Ihre Änderungen an den Remote-Standort sendet. Da git ein verteiltes Versionskontrollsystem ist, besteht der Unterschied darin, dass durch das Festschreiben Änderungen an Ihrem lokalen Repository festgeschrieben werden, während durch das Drücken Änderungen an ein Remote-Repo übertragen werden

Quelle Google

http://gitref.org/basic/ Dieser Link wird auch sehr nützlich sein

https://git-scm.com/docs/git-commit

oroyo segun
quelle
Diese Antwort kopiert Wort für Wort andere Antworten in eine.
Jeffery Opoku-Mensah
Es bringt nichts Neues zu allem, was bereits zuvor gesagt wurde ...
hublo
-1

Für Laien git commitist dies der Schritt, bevor git pushSie sie in dieser Reihenfolge ausführen, um Ihre Datei erfolgreich an github zu senden.

Eifer Murapa
quelle
-2

git commitist das Festschreiben der Dateien, die im lokalen Repo bereitgestellt werden. git pushbesteht darin, den Hauptzweig der lokalen Seite schnell mit dem entfernten Hauptzweig zusammenzuführen. Die Fusion wird jedoch nicht immer erfolgreich sein. Wenn Ablehnung erscheint, müssen Sie, pulldamit Sie eine erfolgreiche machen können git push.

Marcus Thornton
quelle
Einige Leute möchten vielleicht Druck statt Zug erzwingen. Es hängt von der Situation ab. In der Tat ist das Ziehen nicht das, was Sie tun möchten , wenn Sie in einem Zweig, den Sie nicht mit anderen Personen teilen (selbst in einem Remote-Repo), neu festgeschriebene Commits erstellen .