Git School · FluxGit

Commit na branch errada: mova a alteração com Git

FluxGit ·

Os blocos são casos diferentes, não um script único. Escolha o caso do seu repositório. Substitua branches, caminhos e VERIFIED_COMMIT antes de usar. Comandos de cancelamento só valem para sua operação ativa; não execute ambas as alternativas.

Resposta curta

Se você fez commit na branch errada, preserve primeiro o commit em uma branch de resgate. Aplique a alteração na branch desejada com cherry-pick e confira o resultado. Só depois corrija a origem: reset pode servir para uma ponta privada; uma branch compartilhada normalmente precisa de revert. São decisões separadas.

Exemplo e condições

O exemplo parte de um caso limitado: um commit comum, sem merge, na ponta de main, que pertence à branch feature/fix já existente. A árvore de trabalho está limpa. Troque os nomes pelos seus. Com vários commits, um merge ou trabalho posterior, identifique o intervalo exato antes de usar o reset deste exemplo.

Inspecione antes de alterar

Leia status, a branch atual e o grafo recente. Confira arquivos e patch, não apenas a mensagem: um commit pode misturar tarefas ou trabalho de outras pessoas. Guarde o ID completo em SCHOOL_MISTAKE para reconhecê-lo depois de trocar de branch. Descubra quem já recebeu esse histórico antes de reparar main.

git status --short
git branch --show-current
git log -5 --oneline --decorate
git show --stat HEAD
SCHOOL_MISTAKE=$(git rev-parse HEAD)

Mantenha referência ou checkout separado

A branch de resgate mantém o objeto do commit acessível; não copia alterações sem commit. Salve e confira trabalho local separadamente, com um commit deliberado, stash revisado ou cópia externa. Stash com -u inclui arquivos não rastreados, mas não ignorados. Reflog não guarda automaticamente o conteúdo desses arquivos não confirmados.

git branch rescue/wrong-branch "$SCHOOL_MISTAKE"
git show --stat rescue/wrong-branch

Primeiro fluxo

Troque para a branch de destino e faça cherry-pick do ID salvo. Git aplica a alteração e geralmente cria outro commit com ID diferente, pois o pai mudou. Confira o patch e execute as verificações relevantes do projeto. Não remova o original até confirmar a alteração no destino e preservar a referência de resgate.

git switch feature/fix
git cherry-pick "$SCHOOL_MISTAKE"
git show --stat HEAD

Escolha o outro resultado deliberadamente

Somente para uma ponta privada, volte a main e confira que HEAD ainda é SCHOOL_MISTAKE. Com a árvore limpa e o resgate preservado, reset para o pai remove esse commit de main. Reset duro também substitui arquivos rastreados. Se main avançou ou o commit foi compartilhado, esta sequência deixa de corresponder ao caso.

git switch main
git status --short
git rev-parse HEAD
git reset --hard "${SCHOOL_MISTAKE}^"

Limites e exceções

Se a alteração chegou a uma branch compartilhada, prefira revert nessa branch. Ele acrescenta um commit inverso sem apagar o histórico recebido pelos colegas. O cherry-pick do destino e o revert da origem precisam de revisões próprias. Coordene integrações posteriores; este procedimento não é autorização para force push automático.

git switch main
git revert "$SCHOOL_MISTAKE"

Conflitos e limpeza

Cherry-pick pode parar com conflitos. Leia status, resolva e prepare os arquivos certos e continue; use cherry-pick --abort se escolheu a alteração ou o destino errado. Revert tem comandos próprios de continuação e cancelamento. Abortar uma operação ativa não é um backup geral de mudanças feitas fora dela.

git status
git cherry-pick --abort
git revert --abort

Confira o resultado

O grafo final deve mostrar a alteração em feature/fix e a correção escolhida em main. Compare os patches e confira cada checkout. Mantenha rescue/wrong-branch até concluir a revisão. Status limpo não prova que o aplicativo continua correto: verifique também o comportamento afetado.

git log -6 --oneline --decorate --all
git show --stat feature/fix
git status --short

Perguntas frequentes

Vários commits? Confira ordem, dependências e intervalo. Reset --soft? Move a referência e mantém índice e arquivos, mas não transfere sozinho um commit para outra branch. Já fez push? Comece pelo revert do histórico compartilhado e combine explicitamente qualquer reescrita excepcional.

Revise a operação no FluxGit

Use o histórico visual e a visão de alterações do FluxGit para revisar a operação e os commits relevantes. Mantenha as verificações de branch, compartilhamento e arquivos locais do exemplo. A página de download apresenta os builds e plataformas disponíveis.

Referências oficiais do Git

Fluxos relacionados

Baixar FluxGit