Um passo a passo do tutorial Commit na branch errada: como mover um commit fora de main para uma branch de feature usando git branch e git reset, sem perder o trabalho.
Este cenário é o clássico momento "opa, isso foi pra main". Você commitou uma feature direto em main quando deveria estar na própria branch. A correção mantém o commit intacto enquanto traz main de volta ao lugar.
A situação
Este commit foi parar na branch errada. O objetivo é movê-lo para a branch certa.
main tem dois commits: Initial commit e Add skills section, que adicionou uma seção de skills a index.html. Esse segundo commit era para uma branch de feature, não diretamente para main.
Nada está quebrado, mas main agora carrega trabalho de feature inacabado. O objetivo é tirar esse último commit de main e colocá-lo numa branch de feature, para que main volte a um estado limpo.
Comece com git log --oneline. Ver Add skills section como o commit mais recente em main confirma exatamente o que você precisa mover.
A correção, passo a passo
git branch feature captura o commit em uma nova branch.
Confirmar o que está em main
git log
O log mostra Add skills section no topo de main. Esse é o commit a realocar.
Salvar o commit em uma nova branch
git branch feature/skills
Isto cria um ponteiro de branch no commit atual. O trabalho de Add skills section agora está registrado em segurança em feature/skills, mesmo você ainda em main.
Mover main um commit para trás
git reset --hard HEAD~1
Isto rebobina main para antes do commit de skills. Como o commit já está salvo em feature/skills, nada se perde: só o ponteiro de main se move.
Trocar para a branch de feature e continuar
git checkout feature/skills
Agora main está limpa, e o trabalho de skills vive na própria branch, pronto para continuar o desenvolvimento ou abrir um pull request.
Por que a ordem importa
A segurança desta correção depende inteiramente de criar a branch antes de resetar:
git branch feature/skills salva o commit.
git reset --hard HEAD~1 só move main depois.
Se você executar git reset --hard primeiro sem criar a branch, main recua e o commit não está em branch nenhuma. Em geral ainda dá para recuperar com git reflog, mas criar a branch antes evita o susto totalmente.
reset --hard reescreve história. Aqui é seguro porque main não foi enviada. Em um main compartilhado, desfaça com git revert.
Mover commits entre branches: as receitas comuns
cherry-pick copia o commit para a branch de destino: a mesma mudança, um novo hash.
A correção depende de para onde o commit precisa ir e se ele já foi enviado:
- Commitou em
main, quer numa nova branch (só local) — git branch feature, depois git reset --hard HEAD~1 em main. O commit agora vive em feature.
- Movê-lo para uma branch existente —
git checkout target, git cherry-pick <commit>, depois apague-o da origem com git reset --hard.
- Mover vários commits — crie a branch primeiro para manter todos, depois
git reset --hard HEAD~N; ou faça cherry-pick de um intervalo específico na branch de destino.
- O commit já foi enviado — não reescreva história pública. Desfaça-o na branch compartilhada com
git revert e reaplique o trabalho em uma branch de feature.
Pratique o caso local no terminal aqui até o reflexo "criar a branch, depois resetar" ficar automático; é o que você vai usar com mais frequência.