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 remoteorigin
Astmaster
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