git push -u origin branch-name отправляет локальную ветку branch-name на удаленный репозиторий origin и настраивает отслеживание этой ветки. Флаг -u (сокращение от --set-upstream) связывает локальную ветку с удаленной, позволяя использовать git pull и git push без указания ветки, а также показывает статус расхождения между локальной и удаленной ветками.
Команда git push -u origin branch-name выполняет несколько важных действий, связанных с отправкой локальной ветки на удаленный репозиторий и настройкой отслеживания:
git push:  Основная команда для отправки (загрузки) изменений из вашей локальной ветки (branch-name) на удаленный репозиторий. Без указания опций, она может сработать только если локальная ветка уже связана с удаленной (и настроено отслеживание).
    origin:  Это псевдоним (remote) для удаленного репозитория.  По умолчанию, origin обычно указывает на главный удаленный репозиторий, с которого вы клонировали проект.  Это как бы "адрес" того места, куда вы хотите отправить свои изменения.
    branch-name: Имя вашей локальной ветки, которую вы хотите отправить на удаленный репозиторий.
    -u (или --set-upstream): Самая важная часть. Эта опция устанавливает "upstream" ссылку (связь) между вашей локальной веткой branch-name и удаленной веткой origin/branch-name. Это означает, что Git "запоминает", что ваша локальная ветка связана с конкретной веткой на удаленном репозитории.
    Что происходит в итоге:
branch-name отправляется на удаленный репозиторий origin, и создается (если еще не существует) ветка origin/branch-name.branch-name и удаленной веткой origin/branch-name.  Теперь Git знает, что они "отслеживают" друг друга.Последствия установки upstream:
git push и git pull (без указания origin branch-name), Git будет знать, с какой удаленной веткой нужно синхронизироваться.git status будет показывать, опережает ли ваша локальная ветка удаленную, или наоборот, и нужно ли делать git pull или git push.Когда использовать:
Обычно, вы используете git push -u origin branch-name при первом отправлении новой локальной ветки на удаленный репозиторий.  В последующих отправках достаточно будет просто git push.
Пример:
Допустим, вы создали локальную ветку feature/new-button. Чтобы отправить ее на GitHub (где origin настроен на ваш репозиторий) и установить отслеживание, вы используете: git push -u origin feature/new-button