Was ist der Unterschied zwischen 'git merge' und 'git fetch'? Ich habe einige Probleme mit diesen beiden Befehlen. Ich weiß nicht wann ich das eine oder andere benutzen soll.Unterschied zwischen Git Merge und Git fetch?
Antwort
UPDATE - Gut, meine Merge-Diagramme waren die ganze Zeit falsch. ist eine Zusammenführung nicht den „anderen“ Zweig Ref bewegen ...
git fetch
ist über Daten von einem Remote-Repository abgerufen werden.
git merge
ist über die Kombination von Arbeit aus mehreren Linien der Arbeit (in der Regel lokale Zweige, aber siehe unten).
git pull
(Ich weiß, dass Sie nicht über pull
fragten aber bei mir tragen) ist eine Abkürzung, die wie fetch
Daten aus dem entfernten abruft, dann merge
s in Ihren aktuellen Zweig der entsprechende Linie der Arbeit von der Fernbedienung (falls ist eins, die "Tracking-Informationen" bestimmt dies.)
So sagen Sie zum Beispiel, Sie haben eine Remote-Repo mit einem einzigen Zweig (master
) mit 5 commits.
'origin' repo
A --- B --- C --- D --- E <--(master)
Vor einiger Zeit hatten Sie dieses Repo geklont; zu der Zeit war nur der erste Commit (A
) drin. Sie haben dann einen neuen Zweig erstellt (branch1
) und haben ein wenig Arbeit geleistet, indem Sie einen neuen Commit (L
) für diesen Zweig erstellt haben. Zuletzt hatten Sie Änderungen von der Fernbedienung übernommen; mehr darüber, wie das später funktioniert, aber jetzt sagen wir nur, dass Sie Ihre master
um B
aktualisiert haben.
local repo
A --- B <--(master)(origin/master)
\
L <-- (branch1)
Beachten Sie, dass zusätzlich zu Ihrer lokalen Niederlassung Refs (master
und branch1
) Sie einen Remote-Zweig Referenz haben (origin/master
), die für jetzt, das gleiche wie master
sein geschieht.
Nun, wenn Sie Ihre lokale Repo aktualisieren möchten alle Daten vom Ursprung enthalten, aber ohne etwas Verschmelzung, würden Sie sagen,
git fetch
und dann haben Sie
C --- D --- E <--(origin/master)
/
A --- B <--(master)
\
L <-- (branch1)
Das ist ein Abruf - holen Sie sich die Daten von der Fernbedienung.
Der Hauptgrund, warum Sie explizit nach einem merge
fragen, wäre, Ihre Arbeit von branch1
mit Ihrer master
zu kombinieren.So
git checkout master
git merge branch1
(dann lösen möglicherweise Konflikte), und Sie jetzt
C --- D --- E <--(origin/master)
/
A --- B --- M <--(master)
\ /
L ------- <--(branch1)
(Unter Umständen haben - in denen nur einer der Zweige Änderungen enthält, die nicht in der anderen sind - eine Zusammenführung kann über "fast forward" erfolgen, aber das gilt nicht hier, da jeder Zweig hatte Änderungen - dh die Zweige hatten divergierte.Es gibt auch eine andere Technik namens Rebasing, die manchmal verwendet werden kann, um Zweige zu kombinieren, aber das ist eine andere Dose von Würmern ...)
Das ist also der Unterschied zwischen fetch
und merge
- sehr unterschiedliche Operationen, die verschiedene Dinge tun. Aber ich erwähnte auch pull
welche Art von kombiniert die beiden. Wenn Sie eine pull
tun, zieht es zuerst Änderungen von der Remote (falls Sie nicht vollständig mit fetch
aktualisiert haben), und wenn der aktuelle Zweig einen entsprechenden Remote-Zweig hat, führt es sie zusammen.
# still on master
git pull
gibt so etwas wie
C --- D --- E --- N <--(master)(origin/master)
/ /
A --- B --------------- M
\ /
L ------------------- <--(branch1)
(Beachten Sie, dass, während ich normalerweise diese Diagramme zeichnen, so dass die „gerade Linie“ in eine Zusammenführung kommt, ist das „erste parent“, in diesem Fall, dass war für N
unangenehm sein, aber das zeigt die allgemeine Commit-Topologie ...)
Zurück, als ich sprach über "ziehen Änderungen", um B
in Ihrem lokalen Vertreter zu bekommen o, es wäre wahrscheinlich getan worden git pull
git fetch
wird den Quellbaum herunterladen, um nach Änderungen zu suchen, und git merge
verbindet Ihren aktuellen Zweig mit einem anderen Zweig.
- 1. Git Fetch/Merge Confusion
- 2. Git fetch Herkunft vs Git fetch --all
- 3. Wie git Repositories verschachteln; fetch und merge
- 4. Unterschied zwischen Git ziehen. Master vs Git Merge Master
- 5. Synchronisieren von Fork mit Upstream: Git fetch + Git Kasse + Git Merge vs. Git Kasse + Git Ziehen
- 6. Unterschied zwischen Git Merge Master und Herkunft/Master?
- 7. Was ist der Unterschied zwischen 'git remote update', 'git fetch' und 'git pull'?
- 8. Was ist der Unterschied zwischen git pull, git fetch und git rebase?
- 9. Gibt es einen Unterschied zwischen `git merge origin master` und` git merge origin/master`?
- 10. Unterschied zwischen git-log und git-whatchanged?
- 11. Wie stelle ich `git fetch upstream; git merge upstream/master`?
- 12. Unterschied zwischen Git Subtree und Git Filter-Banch
- 13. Unterschied zwischen Git und libgit2
- 14. "git pull" oder "git merge" zwischen Master und Entwicklungszweige
- 15. Was ist der Unterschied zwischen 'git fetch ursprung' und 'git remote update origin'?
- 16. git ziehen VS git holen git rebase
- 17. Git fetch und merge übersprungen fragen mich nach Konflikten
- 18. Was ist der Unterschied zwischen Git zurückgesetzt --hard und git reset --merge
- 19. Git Fetch/Pull Verwirrung
- 20. Reverse ein Git fetch
- 21. Machen Sie eine git Squash Merge und git merge wieder
- 22. git: Unterschied zwischen „branch“ und „refs/Kopf/branch“
- 23. Unterschied zwischen git gui, git bash, git CMD
- 24. Irgendein Unterschied zwischen Git add. und Git hinzufügen --all?
- 25. Was ist der Unterschied zwischen Git am und Git anwenden?
- 26. Was ist der Unterschied zwischen Git Push und Git Pull?
- 27. Unterschied zwischen git reset --hard und git clean
- 28. Unterschied zwischen git add. und git commit -am "message"
- 29. Unterschied zwischen git reset --hard und git checkout
- 30. Unterschied zwischen Git ziehen und Git Pull - Rebase
'git fetch' aktualisiert Ihr lokales Repository mit Commits, die seit dem letzten Abruf zum Server hinzugefügt wurden, während' git merge' versuchen wird, zwei parallele Entwicklungspfade zu kombinieren. Sie sind völlig verschieden. Haben Sie darüber nachgedacht, eines der vielen Tutorials auf git oder das Pro Git Buch (verfügbar [online] (https://git-scm.com/book/en/v2) kostenlos) zu lesen? –