No desenvolvimento/discussão em um pull request é comum fazer commits extras para acertar detalhes de implementação, mudar a lógica de negócio ou até para melhorar os testes.
Quando o código está pronto para ser mergeado é interessante fazer no minímo o squash desses commits e gerar apenas um, para facilitar levantamento/estudo das razões que o desenvolver usou alguma gem/pattern para resolver certo problema e assim identificar soluções para problemas futuros gerados por decisões tomadas atualmente.
Uma vez que a branch esta X
commits a frente da master é necessário desfazer esses commits com o seguinte comando:
git reset HEAD~X --soft
Esse comando vai deixar todas as modificações referentes a todos os commits esperando apenas para um novo commit ser gerado:
git commit -m "Awesome feature developed"
E por último é necessário enviar o novo commit para a branch remota. O truque nessa parte é forçar o git remote a reescrever a árvore de commits:
git push origin nome_da_branch --force