Допустим, мы создали новую ветку с именем dev в локальном репозитории. Новая ветка создавалась следующей командой:
$ git checkout -b dev
Switched to a new branch 'dev'
Для публикации локальной ветки в удаленный репозитарий можно использовать следующую команду:
$ git push origin dev
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:devlabuser/sharp.git
* [new branch] dev -> dev
Однако, такая команда не сделает ветку dev на удаленном репозитарии отслеживаемой и связанной с локальной. Поэтому, лучше всего воспользоваться дополнительной опцией --set-upstream:
$ git push --set-upstream origin dev
Или, что то же самое, но с сокращенным именем опции:
$ git push -u origin dev
После этой команды локальная ветка dev и ветка dev в репозитарии будут связаны между собой. То есть, после такой команды (которая выполняется единожды), можно будет отправлять/принимать изменения лишь выполняя git push из ветки без указания всяких алиасов для сервера и удалённых веток. Это сделано просто для удобства.
Команду создания новой ветки, и команду публикации ветки в репозитарии можно делать сразу друг за другом, даже если в эту новую ветку еще небыло ни одного коммита. Обычно так и рекомендуется делать, чтобы потом не забыть, что изменения в ветке не появятся в репозитарии до тех пор, пока ветка не будет опубликована, и чтобы команда git push срабатывала без лишних вопросов.