W jaki sposób mogę łatwo wcisnąć lokalną gałąź Git do pilota o innej nazwie?

Zastanawiałem się, czy jest łatwy sposób, aby wcisnąć i wyciągnąć lokalną gałąź ze zdalną gałąź o innej nazwie bez podawania obu nazw.

Na przykład:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name

Teraz jak ktoś zaktualizuje remote_branch_name to mogę:

$ git pull

I wszystko jest scalane / fast-forwarded. Jednak, jeśli wprowadzę zmiany w moim lokalnym "newb", nie mogę:

$ git push

Zamiast tego muszę:

% git push origin newb:remote_branch_name
Wydaje się trochę głupie. If git-pull uses git-config branch.newb.merge to determine where to pull from, dlaczego git-push nie może mieć podobnej opcji konfiguracji? Jest na to jakiś fajny Skrót, czy mam kontynuować długą drogę?
Author: Adam Dymitruk, 2011-04-21

4 answers

Jasne. Po prostu ustaw push.default na upstream, aby popychać gałęzie do ich strumieni upstream (które jest tym samym, z którego będzie pobierać pull, zdefiniowane przez branch.newb.merge), zamiast przesuwać gałęzie do gałęzi pasujących w nazwie (co jest domyślnym ustawieniem dla gałęzi push.default, matching).

git config push.default upstream

Zauważ, że wcześniej Git 1.7.4.2 nazywał się tracking, a nie upstream, więc jeśli używasz starszej wersji Git, użyj zamiast tego tracking. Opcja push.default została dodana w Git 1.6.4, więc jeśli korzystasz ze starszej wersji, nie będziesz mieć ta opcja w ogóle i będzie musiała jawnie określić gałąź, do której ma zostać wysłana.

 85
Author: Brian Campbell,
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
2011-04-21 03:00:52

Po wykonaniu pierwszego wciśnięcia dodaj parametr-u :

git push -u origin my_branch:remote_branch

Kolejne pchnięcia pójdą tam, gdzie chcesz.

EDIT:

Jak w komentarzu, to tylko ustawia pull.

git branch --set-upstream
Powinno wystarczyć.
 148
Author: Adam Dymitruk,
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-02-28 02:26:27

Polecenie Adama jest teraz przestarzałe. Można użyć:

git branch --set-upstream-to origin/my_remote_branch my_local_branch

Aby ustawić gałąź upstream my_local_branch na origin/my_remote_branch.

 11
Author: jobin,
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-05-23 12:02:59

Oto proces, który dla mnie zadziałał.

git clone original-repo-url
git remote rename origin upstream
git remote add origin new-repo-url

Teraz twoim nowym repo będzie 'origin', A oryginalnym repo będzie 'upstream'. Potwierdź to, uruchamiając git remote-v. (Uwaga: Upstream jest używany do pobierania z oryginalnego repo - w celu utrzymania lokalnej kopii w synchronizacji z projektem, do którego chcesz przyczynić się - a origin jest używany do ciągnięcia i pchania, ponieważ możesz przyczynić się do własnego repo).

git push origin master

Teraz Twój nowy Remote repo ' s master (na Github) będzie zsynchronizowany z oryginalnym wzorcem, ale nie będzie miał żadnej z gałęzi funkcji.

git rebase upstream/branch-name
git push origin master

Rebase jest inteligentnym połączeniem. Następnie wciśnij ponownie master, a zobaczysz wybraną gałąź funkcji jako master w nowym repo.

Opcjonalnie:

git remote rm upstream
git remote add upstream new-repo-url
 0
Author: urubuz,
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-07-29 21:40:25