Baseado em @Sailesh e @DavidCulp:
(on branch development)
$ git fetch origin master
$ git merge FETCH_HEAD
(resolve any merge conflicts if there are any)
$ git checkout master
$ git merge --no-ff development (there won't be any conflicts now)
O primeiro comando garantirá que você tenha todas as confirmações upstream feitas no mestre remoto, com a resposta Sailesh que não aconteceria.
O segundo fará uma mesclagem e criará conflitos que você poderá resolver.
Depois de fazer isso, você pode finalmente fazer o checkout do master para mudar para o master.
Em seguida, você mescla a ramificação de desenvolvimento no mestre local. O sinalizador no-ff criará um nó de confirmação no mestre para que toda a mesclagem seja rastreável.
Depois disso, você pode confirmar e empurrar sua mesclagem.
Este procedimento garantirá que haja uma consolidação de mesclagem do desenvolvimento para dominar o que as pessoas podem ver; se elas forem olhar para o ramo de desenvolvimento, poderão ver o comprometimento individual que você fez nesse ramo durante o desenvolvimento.
Opcionalmente, você pode alterar seu commit de mesclagem antes de enviá-lo, se desejar adicionar um resumo do que foi feito no ramo de desenvolvimento.
EDIT: minha resposta original sugeriu um git merge master
que não fez nada, é melhor fazer git merge FETCH_HEAD
depois de buscar a origem / mestre
git pull -u
define o rastreamento upstream para a ramificação (ou todas as ramificações, se pressionar mais de uma). Uma vez definido, o rastreamento persiste. Não há razão para usá-lo continuamente.