Checklist de Resolução de Conflitos de Merge
Um processo calmo e repetível para resolver conflitos de merge e rebase do Git em repositórios Rust - especialmente Cargo.toml, Cargo.lock e migrações sqlx.
Como Usar Este Checklist
- Percorra os itens em ordem durante um conflito ativo - não pule direto para a edição de marcadores.
- Resolva um arquivo completamente antes de passar para o próximo quando os conflitos forem grandes.
- Se ficar preso por mais de 30 minutos em um arquivo, forme uma dupla - lockfiles e migrações se beneficiam de um segundo revisor.
- Registre a causa do conflito na descrição do PR para evitar colisões repetidas.
Fase 1 - Estabilizar
- Confirme o tipo de operação:
git statusmostra merge, rebase ou cherry-pick. - Liste os arquivos em conflito:
git diff --name-only --diff-filter=U. - Aborte se estiver no branch errado:
git merge --abortougit rebase --abort. - Faça stash do trabalho não relacionado:
git stash push -m "pré-conflito". - Busque o último remoto:
git fetch origin.
Fase 2 - Entender
- Leia ambos os lados:
<<<<<<<,=======,>>>>>>>marcam o seu vs o recebido. - Verifique as mensagens de commit:
git log --oneline --left-right HEAD...MERGE_HEAD. - Identifique a intenção semântica: formatação cosmética vs versão de dependência vs revisão de migração.
- Regra do Lockfile: escolha o lado vencedor do
Cargo.toml, remova os marcadores, executecargo generate-lockfileoucargo update -p crate. - Regra de Migração: nunca duplique IDs de revisão
sqlx; pode ser necessário fazer o merge da migração após a resolução.
Fase 3 - Resolver
- Resolva um arquivo por vez: sintaxe TOML e Rust válida, sem marcadores sobrando.
- Prefira a política de dependência do upstream: alinhe com
main, a menos que o ticket exija um bump. - Execute
rustfmtem Rust modificado:cargo fmt -- file.rs. - Adicione o arquivo resolvido ao stage:
git add <arquivo>;git diff --checkdetecta marcadores restantes. - Continue a operação:
git rebase --continueou complete o commit de merge.
Fase 4 - Verificar
- Build bloqueado:
cargo build --locked. - Fmt:
cargo fmt --all -- --check. - Clippy:
cargo clippy --all-targets -- -D warnings. - Testes:
cargo test --all-features. - Migrações:
sqlx migrate runquando os arquivos de migração entraram em conflito.
Fase 5 - Finalizar
- Revise o tamanho do diff:
git diff origin/main...HEAD. - Force push com segurança após rebase:
git push --force-with-leaseapenas no seu branch de feature. - Comentário no PR: anote os arquivos em conflito e as escolhas de resolução.
- Prevenção: faça rebase com mais frequência se os mesmos arquivos entrarem em conflito repetidamente.
- Sincronize com o autor: esclareça commits recebidos mal compreendidos antes do merge.
FAQs
Sempre prefira o Cargo.lock recebido?
Não. Resolva o Cargo.toml primeiro, depois regenere o lockfile a partir do manifesto mesclado.
Conflito no diretório target/?
Não deve ser rastreado; adicione ao .gitignore e remova do índice.
Relacionados
- Branching & Merging
- Essential Git Commands
- Gerenciamento de Dependências
- Configuração de CI para Rust
Versões da Pilha: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4 e Polars 0.46+.