Supondo um gráfico de confirmação como:
| (A) ---------> (B) ----------> (C)
| ^
| (master)
Você deseja primeiro fazer check master- out e criar um branch que aponta para onde masteratualmente está:
git checkout master
git branch pointer master
Deve ficar assim agora:
| (A) ---------> (B) ----------> (C)
| ^
| (HEAD, master, pointer)
Agora que você já está ligado master, diremos ao masterbranch para retroceder um commit:
git reset master~1
Agora, masterdeve ser movido um espaço para trás, mas o pointerbranch ainda está no commit mais recente:
| (A) ---------> (B) ----------> (C)
| ^ ^
| (HEAD, master) (pointer)
Neste ponto, você pode enviar masterpara um controle remoto ou qualquer outro lugar e, em seguida, avançar rapidamente e mesclá-lo de volta ao pointerbranch. Você pode matar o pointergalho nesse ponto:
git push origin master
git merge --ff-only pointer
git branch -D pointer
Final :
| (A) ---------> (B) ----------> (C)
| ^ ^
| [ origin/master ] (HEAD, master)