Ich habe vor einiger Zeit angefangen, Git zu verwenden und verstehe die Feinheiten nicht ganz. Meine grundlegende Frage hier ist, den Unterschied zwischen a git pull
und herauszufinden git pull --rebase
, da das Hinzufügen der --rebase
Option nichts ganz anderes zu tun scheint: nur ein Ziehen.
Bitte helfen Sie mir, den Unterschied zu verstehen.
Antworten:
git pull
=git fetch
+git merge
gegen Tracking Upstream Branchgit pull --rebase
=git fetch
+git rebase
gegen Tracking Upstream BranchWenn Sie wissen möchten, wie
git merge
und sichgit rebase
unterscheiden, lesen Sie dies .quelle
git pull --rebase
dasselbe istgit fetch
undgit rebase
im Grunde so ist, wie es ist, aber es ist nicht genau semantisch äquivalent. Es gibt einige Unterschiede, von denen einige hier erläutert werden. gitolite.com/git-pull--rebasefetch
?Antwort von (und leicht modifiziert):
http://gitolite.com/git-pull--rebase
quelle
a---b+c---d+e---f---p'---q'---r' (foo)
da die Basis Hashes ändert.A
, und ich schickte eine PR an das vorgelagerte Repo, die akzeptiert wurde. Als ich danngit pull --rebase
gegen das Upstream-Repo war, bekam ich kein neuesA'
Commit über das gezogene Upstream-Repo. TatsächlichA'
gab es überhaupt keine . Liegt das daran, dassA
es in das System integriert wurde? Oder liegt es daran, dass es keinen Unterschied zwischen dem Upstream und meiner neu basierten Version gab?git pull --rebase
. Eine Sache, die mich in dieser hypothetischen Situation verwirrt, ist, dass der vorgelagerte Betreuer die Projekthistorie geändert hat, die bereits in die Repositorys der lokalen Entwickler gezogen wurde. Ist das nicht nur schlechte Praxis im Allgemeinen? Wenn er Commits quetschen / den Verlauf neu schreiben wollte, sollte dies vor der Integration in das zentrale Repository geschehen sein, um diese Art von Konflikten zu vermeiden.Angenommen, Sie haben zwei Commits in der lokalen Niederlassung:
Nach "git pull" wird sein:
Nach "git pull --rebase" gibt es keinen Zusammenführungspunkt G. Beachten Sie, dass D und E unterschiedliche Commits werden:
quelle
git rebase
tut? Aber wir reden darübergit pull --rebase
. Und das sind verschiedene Dinge.Im einfachsten Fall keine Kollisionen
Siehe auch:
man git-pull
Siehe auch:
Wann sollte ich git pull --rebase verwenden?
http://git-scm.com/book/en/Git-Branching-Rebasing
quelle
git sdd modified-file; git rebase --continue
oder merge:git add modified-file; git commit;
womodified-file
ist Ihre lokale Datei, die Sie manuell geändert haben / mergetoolfetch
? Warum haben sie zweirebase
Flows erstellt? 1)git rebase
und 2)git pull --rebase
?Dazu ist es wichtig, den Unterschied zwischen Merge und Rebase zu verstehen.
Weitere Informationen finden Sie unter http://www.derekgourlay.com/archives/428
quelle