Eu escrevi um textão e depois vi que o Alberto respondeu. Enfim, vou deixar aqui embaixo, de repente te ajuda ou ajuda outra pessoa.
Oi Taina.
Você entendeu o conceito de branches? Pensa que na branch master está todo o sistema que está em produção e funcionando atualmente. Quando surgem novas implementações, nós precisamos nos basear na master (que é o sistema completo atual) para adicionar essas implementações, porém não queremos alterar nada na master ainda, pois precisamos testar bem o que implementarmos.
Partindo do que eu disse, imagine que chegasse pra você uma solicitação para adicionar a funcionalidade de pagamento via PayPal no site de e-commerce que você dá suporte. Você poderia criar uma branch baseada na master. Para isso, uma das formas é executar o seguinte comando (precisa estar na master para o Git se basear nela):
git checkout -b feature-paypal
Estando na master e executando esse comando, o Git criará uma branch nova de nome feature-paypal, exatamente igual à branch master que está no repositório.
Até aí tudo bem, acho que estava claro pra você já. Agora vamos para as suas dúvidas.
Não sei se você já sabe disso, mas ao criar a branch com o comando acima (ou com git branch), você cria a branch localmente apenas. Se eu quiser, por exemplo, jogar ela no repositório para que outras pessoas vejam, eu preciso executar esse comando:
git push origin feature-paypal
Agora pense o seguinte. Sua branch feature-paypal está igual a master, mas isso porque você acabou de criá-la. A partir desse momento você começaria a fazer as alterações necessárias no seu sistema para implementar o pagamento via PayPal. Durante todo o desenvolvimento, você vai registrando o seu avanço através dos seus commits e pushes. Imagine que quando você concluir essa implementação, precisa testar isso em um servidor de homologação. Antes de gerar os pacotes dessa sua versão, você precisar dar um pull da master na sua branch:
git pull origin master
Isso vai fazer com que o Git atualize a branch que você está com o conteúdo da branch que vem depois de origin no comando, que no caso é a master. Se você não enxergar o motivo disso, pense que a ideia do versionamento é justamente para ajudar equipes a trabalharem em conjunto. Alguém pode ter atualizado a master (push na master) depois que você criou sua branch com base nela. Se você não atualizar a sua branch constantemente com a master, corre o risco de depois subir alguma alteração e acabar matando alterações de outros que tinham dado push na master, porém você não atualizou a sua branch.
Se você der commit e push direto na master, é extremamente crítico, pois qualquer erro você precisa ficar revertendo, ao invés de ter a possibilidade de excluir a branch e criar uma nova com base na master. Sem contar que se mais de uma pessoa trabalhar na mesma branch, não faz sentido, pois ficaria uma confusão para testar, pois sempre todos precisariam ficar atualizando (pull) a branch local com as alterações dos outros para poder dar push (lembrando que para dar push na sua branch remota, a sua local tem que estar sincronizada com a remota).