Ich kann das einfach nicht verstehen. Ich habe viel im Internet und in Büchern gelesen und etwas bleibt einfach nicht in meinem Kopf. Kann mir bitte jemand die Dummy-Version von Folgendem geben:
- Git Fetch vs Pull
- Git Merge vs Rebase
Ich kann das einfach nicht verstehen. Ich habe viel im Internet und in Büchern gelesen und etwas bleibt einfach nicht in meinem Kopf. Kann mir bitte jemand die Dummy-Version von Folgendem geben:
Antworten:
fetch Lädt alle Änderungen aus dem Remote-Zweig * herunter, aktualisiert Ihre Repository-Daten, lässt jedoch Ihren lokalen * Zweig unverändert.
pullführt eine fetchund zusätzlich mergedie Änderungen in Ihrer lokalen Niederlassung durch.
Was ist der Unterschied? pullAktualisiert Ihren lokalen Zweig mit Änderungen aus dem gezogenen Zweig. A fetchbringt Ihre lokale Niederlassung nicht voran.
Angesichts der folgenden Geschichte:
C --- D --- E lokal
/.
A --- B --- F --- G Fernbedienung
mergeverbindet zwei Entwicklungsgeschichten miteinander. Dazu werden die Änderungen wiedergegeben, die in Ihrem lokalen Zweig aufgetreten sind, nachdem dieser über dem Remote-Zweig auseinander gegangen ist, und das Ergebnis in einem neuen Commit aufgezeichnet. Diese Operation behält die Abstammung jedes Commits bei.
Die Wirkung von a mergewird sein:
C --- D --- E lokal
/ \.
A --- B --- F --- G --- H Fernbedienung
rebaseÜbernimmt Commits, die in Ihrer lokalen Zweigstelle vorhanden sind, und wendet sie erneut auf die Remote-Zweigstelle an. Diese Operation schreibt die Vorfahren Ihrer lokalen Commits neu.
Die Wirkung von a rebasewird sein:
C '- D' - E 'lokal
/.
A --- B --- F --- G Fernbedienung
Was ist der Unterschied? A mergeändert die Abstammung von Commits nicht. A rebase
schreibt die Abstammung Ihrer lokalen Commits neu.
*Diese Erklärung wird davon ausgegangen , dass der Stromzweig eine Zweigstelle ist, und daß die Verzweigung als Argument angegeben fetch, pull, merge, oder rebaseist ein Remote - Zweig. Dies ist der übliche Fall. pullBeispielsweise werden alle Änderungen aus dem angegebenen Zweig heruntergeladen , Ihr Repository aktualisiert und mergedie Änderungen in den aktuellen Zweig übernommen.
Fetch vs Pull
Git-Abruf aktualisiert nur Ihre Repo-Daten, aber ein Git-Pull führt im Grunde einen Abruf durch und führt dann den gezogenen Zweig zusammen
Was ist der Unterschied zwischen "Git Pull" und "Git Fetch"?
Merge vs Rebase
aus Atlassian SourceTree Blog, Merge oder Rebase :
Durch das Zusammenführen werden zwei Entwicklungslinien zusammengeführt, wobei die Abstammung jeder Commit-Historie erhalten bleibt.
Im Gegensatz dazu vereinheitlicht das erneute Basieren die Entwicklungslinien, indem Änderungen aus dem Quellzweig neu geschrieben werden, sodass sie als untergeordnete Elemente des Zielzweigs angezeigt werden. Dabei wird effektiv so getan, als ob diese Commits die ganze Zeit über über den Zielzweig geschrieben wurden.
Schauen Sie sich auch Learn Git Branching an , ein schönes Spiel, das gerade auf HackerNews veröffentlicht wurde ( Link zu Post ) und viele Tricks zum Verzweigen und Zusammenführen lehrt. Ich glaube, dass es in dieser Angelegenheit sehr hilfreich sein wird.
git merge <remote>/<branch>. Wenn Sie beispielsweise der Hauptzweig sind und Ihre Fernbedienung den Ursprung hat, können Sie dies tun git merge origin/master.
Pull vs Fetch :
Ich verstehe das so, dass git pulles einfach git fetchfolgt git merge. Das heißt, Sie rufen die Änderungen von einem Remote-Zweig ab und führen sie dann in den aktuellen Zweig ein.
Merge vs Rebase :
Eine Zusammenführung erfolgt wie im Befehl angegeben. Führen Sie die Unterschiede zwischen dem aktuellen Zweig und dem angegebenen Zweig (in den aktuellen Zweig) zusammen. Dh der Befehl git merge another_branchwird another_branchin den aktuellen Zweig zusammengeführt.
Eine Rebase funktioniert etwas anders und ist irgendwie cool. Angenommen, Sie führen den Befehl aus git rebase another_branch. Git findet zuerst die neueste gemeinsame Version zwischen dem aktuellen Zweig und another_branch. Dh der Punkt, bevor die Zweige auseinander gingen. Dann bewegt git diesen divergierenden Punkt zum Kopf des another_branch. Schließlich werden alle Commits im aktuellen Zweig seit dem ursprünglichen Sägeanschnitt werden wiederholt aus dem neuen Sägeanschnitt. Dies schafft eine sehr saubere Geschichte mit weniger Zweigen und Zusammenführungen.
Es ist jedoch nicht ohne Fallstricke! Da der Versionsverlauf "neu geschrieben" wird, sollten Sie dies nur tun, wenn die Commits nur in Ihrem lokalen Git-Repo vorhanden sind. Das heißt: Tun Sie dies niemals , wenn Sie die Commits auf ein Remote-Repo übertragen haben.
Die Erklärung zur Umbasierung in diesem Online-Buch ist recht gut und enthält leicht verständliche Abbildungen.
Ziehen Sie mit Rebasing statt Merge
Ich benutze Rebase eigentlich ziemlich oft, aber normalerweise ist es in Kombination mit Pull:
git pull --rebase
ruft Remote-Änderungen ab und stützt sie dann neu, anstatt sie zusammenzuführen. Das heißt, es werden alle Ihre lokalen Commits vom letzten Mal, als Sie einen Pull ausgeführt haben, wiedergegeben. Ich finde das viel sauberer als ein normales Ziehen mit dem Zusammenführen, was ein zusätzliches Festschreiben mit dem Zusammenführen erzeugt.
Zusammenführen - Der HEAD-Zweig generiert ein neues Commit, wobei die Abstammung jedes Commit-Verlaufs erhalten bleibt. Der Verlauf kann verschmutzt werden, wenn mehrere Personen, die parallel an demselben Zweig arbeiten, Zusammenführungsverpflichtungen eingehen.
Rebase - Schreibt die Änderungen eines Zweigs in einen anderen neu, ohne ein neues Commit zu erstellen. Der Codeverlauf ist vereinfacht, linear und lesbar, funktioniert jedoch nicht mit Pull-Anforderungen, da Sie nicht sehen können, welche geringfügigen Änderungen jemand vorgenommen hat.
Ich würde es verwenden git merge, wenn ich mich mit funktionsbasierten Workflows beschäftige oder wenn ich mit Rebase nicht vertraut bin. Aber wenn ich eine sauberere, linearere Geschichte möchte, git rebaseist dies angemessener. Weitere Informationen finden Sie in diesem Artikel zum Zusammenführen oder erneuten Basieren .