Предполагая такой график фиксации:
| (A) ---------> (B) ----------> (C)
| ^
| (master)
Вы хотите сначала оформить заказ masterи создать ветку, указывающую на masterтекущее местоположение:
git checkout master
git branch pointer master
Теперь должно выглядеть так:
| (A) ---------> (B) ----------> (C)
| ^
| (HEAD, master, pointer)
Теперь, когда вы уже в процессе master, мы прикажем masterветке переместиться на одну фиксацию назад:
git reset master~1
Теперь masterнужно переместиться на один пробел назад, но pointerветка все еще находится на последней фиксации:
| (A) ---------> (B) ----------> (C)
| ^ ^
| (HEAD, master) (pointer)
На этом этапе вы можете нажать masterна удаленный компьютер или где-либо еще, а затем быстро слить его обратно в pointerветку. Вы можете убить pointerветку в этот момент:
git push origin master
git merge --ff-only pointer
git branch -D pointer
Финал:
| (A) ---------> (B) ----------> (C)
| ^ ^
| [ origin/master ] (HEAD, master)