Dlaczego muszę robić '-- set-upstream ' cały czas?
Tworzę nową gałąź w Git:
git branch my_branch
Push it:
git push origin my_branch
Teraz powiedzmy, że ktoś dokonał pewnych zmian na serwerze I chcę wyciągnąć z origin/my_branch
. Ja:
git pull
Ale dostaję:
You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "my_branch"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Nauczyłem się, że mogę to zrobić z:
git branch --set-upstream my_branch origin/my_branch
Ale dlaczego muszę to robić dla każdej gałęzi, którą tworzę? Czy nie jest oczywiste, że jeśli wepchnę my_branch
do origin/my_branch
, wtedy chciałbym wciągnąć origin/my_branch
do my_branch
? Jak Mogę ustawić to jako domyślne zachowanie?
18 answers
Skrót, który nie zależy od zapamiętywania składni dla git branch --set-upstream
1 jest do zrobienia:
git push -u origin my_branch
... pierwszy raz, kiedy wciskasz gałąź. Można też wcisnąć do bieżącej gałęzi do gałęzi o tej samej nazwie (przydatne dla aliasu):
git push -u origin HEAD
Musisz użyć -u
tylko raz, a to ustawia skojarzenie pomiędzy twoją gałęzią a tą w origin
w taki sam sposób, jak robi to git branch --set-upstream
.
git push
i git pull
.
1 może to zabrzmieć głupio, ale bardzo często zapominam podać bieżącą gałąź, zakładając, że jest to domyślna-nie jest , a wyniki są najbardziej mylące:) {]}
Aktualizacja 2012-10-11 : widocznie nie jestem jedyną osobą, która uznała, że łatwo się pomylić! Podziękowania dla VonC za wskazanie, że git 1.8.0 wprowadza bardziej oczywisty git branch --set-upstream-to
, który może być użyty w następujący sposób, jeśli jesteś na gałęzi my_branch
:
git branch --set-upstream-to origin/my_branch
... lub z krótką opcją:
git branch -u origin/my_branch
Ta zmiana i jej uzasadnienie opisane są w uwagach do wydania git 1.8.0, release candidate 1:
Kuszące było powiedzenie
git branch --set-upstream origin/master
, ale to mówi Gitowi, aby zorganizował lokalną gałąźorigin/master
, aby zintegrowała się z aktualnie sprawdzoną gałąź, co jest wysoce nieprawdopodobne, co użytkownik miał na myśli. Opcja jest przestarzały; zamiast tego użyj nowej opcji--set-upstream-to
(z krótkim i słodkim-u
).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-02 04:32:14
Możesz to zrobić z mniejszą ilością pisania. Po pierwsze, zmień sposób działania push:
git config --global push.default current
To wywnioskuje origin my_branch
część, więc można zrobić:
git push -u
Który utworzy zdalną gałąź o tej samej nazwie i wyśledzi ją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-08 10:14:04
Możesz po prostu
git checkout -b my-branch origin/whatever
W pierwszej kolejności. Jeśli ustawisz branch.autosetupmerge
lub branch.autosetuprebase
(Moje Ulubione) na always
(domyślnie jest true
), my-branch
automatycznie śledzi origin/whatever
.
Zobacz git help config
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-06 22:33:24
Można ustawić prostsze pod prąd na dwa sposoby. Najpierw podczas tworzenia gałęzi:
git branch -u origin/my-branch
Lub po utworzeniu gałęzi, możesz użyć tego polecenia.
git push -u origin/my-branch
Możesz również rozgałęziać, sprawdzać i ustawiać pod prąd jednym poleceniem:
git checkout -b my-branch -t origin/my-branch
Osobiście preferuję to zrobić w dwuetapowym poleceniu:
git checkout -b my-branch
git push -u origin/my-branch
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-02 22:24:12
Możesz użyć:
Git config --global branch.autosetupmerge zawsze
Który połączy gałąź upstream za każdym razem, gdy utworzysz lub zrealizujesz nową gałąź.
Zobacz https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/
Działa to również z autosetuprebase, jeśli stosujesz bardziej skoncentrowany przepływ pracy rebase, ale nie używaj go, chyba że wiesz, co robisz, ponieważ domyślnie zachowanie pull będzie rebase, co może powodować dziwne rezultaty.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 20:05:12
To jest moje najczęstsze użycie dla The Fuck.
$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
$ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...
Poza tym, fajnie jest wpisywać przekleństwa w terminalu.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 17:22:02
Przy okazji, skrót do przeniesienia bieżącej gałęzi do pilota o tej samej nazwie:
$ git push -u origin HEAD
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-15 14:20:30
git branch --set-upstream-to=origin/master<branch_name>
Możesz również jawnie powiedzieć git pull, która zdalna gałąź ma ściągnąć (Jak wspomina w komunikacie o błędzie):
git pull <remote-name> <remote-branch>
uważaj jednak na to: jeśli jesteś na innej gałęzi i wykonasz wyraźne pociągnięcie, refspec, który pociągniesz, zostanie scalony z gałęzią, na której się znajdujesz!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-20 14:41:17
Jeśli chcesz śledzić gałąź, która już istnieje na pilocie (np. origin/some Branch) ale nie Sprawdzilem jeszcze tego lokalnie, mozna zrobic:
$ git checkout --track origin/somebranch
Uwaga: '- t 'jest skróconą wersją opcji '--track'.
To tworzy to samo skojarzenie od samego początku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 16:11:01
Używam tego aliasu Git zamiast kopiować / wklejać sugestię z Git za każdym razem: https://gist.github.com/ekilah/88a880c84a50b73bd306
Źródło skopiowane Poniżej (dodaj to do pliku ~/.gitconfig
):
[alias]
pushup = "!gitbranchname() { git symbolic-ref --short HEAD; }; gitpushupstream() { git push --set-upstream origin `gitbranchname`; }; gitpushupstream"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-28 05:07:32
Możesz skonfigurować naprawdę dobry alias, który poradzi sobie z tym bez zbyt zwięzłej składni.
Mam następujący alias w ~/.gitconfig
:
po = "!git push -u origin \"$(git rev-parse --abbrev-ref HEAD)\""
Po dokonaniu commitu na nowej gałęzi, możesz wypchnąć nową gałąź, wpisując komendę:
git po
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-26 18:41:52
Ja osobiście używam następujących aliasów w bash
W ~/.plik gitconfig
[alias]
pushup = "!git push --set-upstream origin $(git symbolic-ref --short HEAD)"
I w~/.basehrc lub ~/.plik zshrc
alias gpo="git pushup"
alias gpof="gpo -f"
alias gf="git fetch"
alias gp="git pull"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-12 05:09:22
Dla tych, którzy szukają aliasu, który działa z git pull
, to jest to, czego używam:
alias up="git branch | awk '/^\\* / { print \$2 }' | xargs -I {} git branch --set-upstream-to=origin/{} {}"
Teraz Kiedy masz:
$ git pull
There is no tracking information for the current branch.
...
Just run:
$ up
Branch my_branch set up to track remote branch my_branch from origin.
$ git pull
And you ' re good to go
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 21:52:34
Możesz również zrobić git push -u origin $(current_branch)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 08:50:37
Ponieważ git ma fajną zdolność do wypychania / ściągania różnych gałęzi do różnych "upstream" repozytoriów. Można nawet użyć osobnych repozytoriów do pchania i ciągnięcia-na tej samej gałęzi. To może stworzyć rozproszony, wielopoziomowy przepływ, widzę, że jest to przydatne w projektach takich jak jądro Linuksa. Git został pierwotnie zbudowany do wykorzystania w tym projekcie.
W konsekwencji nie zakłada się, które repo twoja gałąź powinna śledzić.
On the other ręka, większość ludzi nie używa git w ten sposób, więc może to zrobić dobry przypadek dla opcji domyślnej.
Git jest ogólnie dość niski poziom i może być frustrujący. Jednak istnieją GUI i powinno być łatwo pisać skrypty pomocnicze, jeśli nadal chcesz używać go z powłoki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 11:49:26
I tak jakby na nowo odkryłem legit
z tego powodu (tylko OS X). Teraz jedyne czego używam przy rozgałęzianiu to te dwie komendy:
legit publish [<branch>]
Publikuje podaną gałąź na zdalnym. (alias: pub
)
legit unpublish <branch>
Usuwa określoną gałąź z pilota. (alias: unp
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-09 15:11:34
Używamy phabricatora i nie naciskamy używając Gita. Musiałem utworzyć alias bash, który działa na Linuksie / mac
vim ~/.bash_aliases
new_branch() {
git checkout -b "$1"
git branch --set-upstream-to=origin/master "$1"
}
Zapisz
source ~/.bash_aliases
new_branch test #instead of git checkout -b test
git pull
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-26 15:40:05