Eu criei um ramo local que eu quero 'push' upstream. Há uma pergunta similar aqui no Stack Overflow sobre como rastrear um ramo remoto recém-criado.
No entanto, o meu fluxo de trabalho é ligeiramente diferente. **Primeiro*** Quero criar uma filial local, e só vou empurrá-la para o upstream quando eu'estiver satisfeito e quiser compartilhar minha filial.
**UPDATE Com Git 2.0 há uma resposta mais simples*** Eu escrevi abaixo: https://stackoverflow.com/a/27185855/109305
Primeiro, você cria sua filial localmente:
git checkout -b <branch-name> # Create a new branch and check it out
A filial remota é criada automaticamente quando você a empurra para o servidor remoto. Então, quando você se sentir pronto para isso, você pode simplesmente fazer:
git push <remote-name> <branch-name>
Onde <nome remoto>
é tipicamente origin
, o nome que o git dá ao controle remoto do qual você clonou. Os seus colegas puxariam então esse ramo, e ele é automaticamente criado localmente.
Note que, formalmente, o formato é:
git push <remote-name> <local-branch-name>:<remote-branch-name>
Mas quando se omite um, presume-se que ambos os nomes dos ramos são os mesmos. Tendo dito isto, como uma palavra de caução, não cometa o erro crítico de especificar apenas :<nome do ramo remoto>
(com os dois pontos), ou o ramo remoto será apagado!
Para que um "puxão" posterior saiba o que fazer, talvez você queira utilizar:
git push --set-upstream <remote-name> <local-branch-name>
Como descrito abaixo, a opção `--set-upstream' configura um ramo upstream:
Para cada ramo que esteja em dia ou empurrados com sucesso, somados a montante (rastreamento) referência, usado por git-pull sem argumentos(1) e outros comandos.
Primeiro, você deve criar sua filial localmente
git checkout -b your_branch
Depois disso, você pode trabalhar localmente na sua filial, quando estiver pronto para compartilhar a filial, empurre-a. O próximo comando empurra o ramo para a origem do repositório remoto e o rastreia
git push -u origin your_branch
Os companheiros de equipe podem chegar à sua filial, fazendo isso:
git fetch
git checkout origin/your_branch
Pode continuar a trabalhar no ramo e a empurrar sempre que quiser sem passar argumentos para empurrar (o empurrão sem argamassa empurrará o mestre para o mestre remoto, o seu_filial local para remotamente o seu_filial, etc...)
git push
Os colegas de equipe podem empurrar para a sua filial fazendo commits e depois empurrar explicitamente
... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch
Ou seguir o ramo para evitar os argumentos para empurrar
git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push
Como indicado nas respostas anteriores,
git push <remote-name> <local-branch-name>:<remote-branch-name>
é suficiente para empurrar uma filial local.
Seus colegas, podem puxar todos os ramos remotos (incluindo os novos) com este comando:
git remote update
Então, para fazer mudanças no ramo, o fluxo habitual:
git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>