Então digamos que num fluxo de desenvolvimento (é muito particular, depende do caso), eu teria meu repositório local master que podemos dizer que será uma cópia do código final que está ou num servidor local ou no GitHub. Se eu for iniciar um novo desenvolvimento faria
1. Um pull na branch master do meu repositório local (ai eu teria certeza eu meu master estamos alinhados com o do servidor)
2. Criaria uma branch para esse meu desenvolvimento (que também seria uma cópia da minha branch local master, diga-se de passagem de passagem é a cópia do que está no servidor)
3. Ao final de meu dev. faço um merge dessa minha branch de dev para a branch master local.
Dúvidas
1. No ponto 3, ao tentar realizar o merge da branch de dev. para master, o git já alertaria que há uma nova versão na minha master do servidor (é claro, caso alguém tenha subido algo para master do servidor);
2. Caso ele alerte e eu tenha que realizar um pull, eu teria que assegurar que na minha master local não tenha nenhum alteração, certo? se houvesse, o que ocorreria? ele faria um merge automaticamente? e ai depois eu só revisaria e subiria isso para master do servidor? Porque eu posso perder minha alteração que se encontra na master local (é claro, não é aconselhável trabalhar na branch master local).
Obs.: master do servidor é a master da master, minha produção