Outras respostas pareciam incompletas.
Eu tentei abaixo na íntegra, e funcionou bem.
NOTA:
1. Faça uma cópia do seu repositório antes de tentar abaixo, por segurança.
Detalhes:
1. Todo o desenvolvimento acontece no ramo de desenvolvimento
2. qa ramo é apenas a mesma cópia do desenvolvimento
3. De tempos em tempos, o código de desenvolvimento precisa ser movido / sobrescrito no ramo qa
então precisamos sobrescrever qa branch, do dev branch
Parte 1:
Com os comandos abaixo, o antigo qa foi atualizado para o desenvolvedor mais recente:
git checkout dev
git merge -s ours qa
git checkout qa
git merge dev
git push
O comentário automático para o último push é apresentado abaixo:
// Output:
// *<MYNAME> Merge branch 'qa' into dev,*
Este comentário parece reverso, porque a sequência acima também parece reversa
Parte 2:
Abaixo estão inesperados, novos commits locais no dev, os desnecessários,
então precisamos jogar fora e tornar o dev intocado.
git checkout dev
// Output:
// Switched to branch 'dev'
// Your branch is ahead of 'origin/dev' by 15 commits.
// (use "git push" to publish your local commits)
git reset --hard origin/dev
// Now we threw away the unexpected commits
Parte 3:
Verifique se tudo está como o esperado:
git status
// Output:
// *On branch dev
// Your branch is up-to-date with 'origin/dev'.
// nothing to commit, working tree clean*
Isso é tudo.
1. qa antigo agora é sobrescrito pelo novo código de ramificação do desenvolvedor
2. o local está limpo (origem remota / dev é intocado)