Короткий ответ
Если вы действительно хотите быть явным и использовать эту -uопцию при необходимости, но просто не хотите вводить все:
git push -u origin foo
Затем вы можете использовать следующий псевдоним:
[alias]
push-u = !git push -u origin $(git symbolic-ref --short HEAD)
И просто введите:
git push-u
Длинный ответ
Обычно потребность в -u(сокращении для --set-upstream) возникает тогда, когда мы только что создали новую локальную ветвь и зафиксировали, и мы хотим отправить ее вверх по течению. В удаленном репозитории еще нет новой ветки, поэтому нам нужно указать git, что нужно создать и отслеживать удаленную ветку, прежде чем отправлять фиксацию. Это необходимо только для первого нажатия на ветку. Вот типичный сценарий:
git checkout -b foo # Create local branch
git commit -m "Foo" # Create local commit
git push -u origin foo # Create and track remote branch, and push commit
git commit -m "Bar" # Create local commit
git push # Push commit
Лично мне нравится необходимость явного указания git push -uпри создании удаленной ветки: это довольно важная операция - предоставить миру совершенно новую ветку.
Однако я ненавижу то, что мы должны явно писать git push -u origin foo. Мало того, что печатать это сложно, но, что более важно, это довольно чревато ошибками! При вводе имени ветки легко ошибиться, и новая удаленная ветка не будет иметь то же имя, что и ваша локальная ветка! В большинстве случаев вы действительно хотите, чтобы исходный репозиторий был origin, а восходящая ветка имела то же имя, что и ваша локальная ветка.
Поэтому я использую следующий псевдоним в моем .gitconfig, который является подмножеством отличного ответа, предоставленного Марком :
[alias]
push-u = !git push -u origin $(git symbolic-ref --short HEAD)
Теперь мы можем сделать следующее, которое все еще явное, но менее подвержено ошибкам:
git checkout -b foo # Create local branch
git commit -m "Foo" # Create local commit
git push-u # Create and track remote branch, and push commit
git commit -m "Bar" # Create local commit
git push # Push commit
push.defaultиbranch.<name>.mergeв git-config (1) ?