Коротка відповідь
Якщо ви насправді хочете бути явним і використовувати -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) ?