Verstehen von "git pull --rebase" vs "git rebase"

Nach meinem Verständnis vongit pull --rebase origin master, dies sollte der Ausführung der folgenden Befehle entsprechen:

(from branch master):  $ git fetch origin
(from branch master):  $ git rebase origin/master

Ich habe anscheinend einen Fall gefunden, in dem dies nicht wie erwartet funktioniert. In meinem Arbeitsbereich habe ich das folgende Setup:

Astorigin/master referenzen branchmaster on remoteoriginAstmaster ist eingerichtet, um @ zu verfolgorigin/master, und isthinte Master durch mehrere Commits.Astfeature ist eingerichtet, um die lokale Niederlassung zu verfolgenmaster, undvorau vonmaster durch mehrere Commits.

Manchmal verliere ich Commits, indem ich die folgende Folge von Schritten durchführe

(from branch master):  $ git pull --rebase
(from branch master):  $ git checkout feature
(from branch feature): $ git pull --rebase

u diesem Zeitpunkt waren die wenigen Commits, die ich vor mir hatte, auffeature sind jetzt verloren gegangen. Wenn ich jetzt meine Position zurücksetze und stattdessen Folgendes tue:

(from branch feature): $ git reset --hard HEAD@{2} # rewind to before second git pull
(from branch feature): $ git rebase master

Die Commits wurden korrekt angewendet und meine neuen Commits auffeature sind noch vorhanden. Dies scheint direkt meinem Verständnis zu widersprechen, wiegit pull funktioniert, außergit fetch . tut etwas Seltsameres als ich erwartet hatte.

Leider ist dies nicht bei allen Commits zu 100% reproduzierbar. Wenn es jedoch für ein Commit funktioniert, funktioniert es jedes Mal.

Hinweis Mygit pull --rebase hier sollte eigentlich als @ gelesen werd--rebase=preserve, wenn das wichtig ist. Ich habe folgendes in meinem~/.gitconfig:

[pull]
    rebase = preserve

Antworten auf die Frage(2)

Ihre Antwort auf die Frage