Pytanie Jak utworzyć zdalną gałąź Git?


Stworzyłem lokalny oddział, który chcę "wypchnąć" w górę. Podobne pytanie pojawia się w Stack Overflow na temat śledzenia nowo utworzonego zdalnego oddziału.

Jednak mój przepływ pracy jest nieco inny. Pierwszy Chcę utworzyć oddział lokalny, a ja popchnę go dopiero, gdy będę zadowolony i chcę się podzielić moim oddziałem.

  • Jak to zrobić? (moje wyszukiwania google nie wydają się wymyślić nic).
  • Jak mogę powiedzieć moim kolegom, aby wyciągnęli to z repozytorium?

AKTUALIZACJA Dzięki Git 2.0 istnieje prostsza odpowiedź Napisałem poniżej: https://stackoverflow.com/a/27185855/109305


2712
2017-10-05 09:21


pochodzenie


czy ktoś kiedykolwiek odpowiedział ci na drugie pytanie? >> A jak mógłbym powiedzieć moim kolegom, żeby wyciągnęli to z repozytorium? - milkplus
Prawdopodobnie powiązane: Pro Git: 3.5 Git Branching - odległe gałęzie.
@milkplus get fetch --all pobiera nowe gałęzie po stronie zdalnej (ale tylko get fetch --prune usuwa lokalnie odwołania do usuniętych oddziałów zdalnych). Myślę, że to powinno być ustawione przez nich automatycznie, lub musisz rozmawiać z nimi werbalnie. - peterh
Możliwy duplikat Jak przesłać nowy lokalny oddział do zdalnego repozytorium Git i śledzić je? - Trevor Boyd Smith


Odpowiedzi:


Najpierw utwórz swój oddział lokalnie:

git checkout -b <branch-name> # Create a new branch and check it out

Zdalny oddział jest tworzony automatycznie po naciśnięciu go na zdalny serwer. Więc kiedy czujesz się na to gotowy, możesz po prostu zrobić:

git push <remote-name> <branch-name> 

Gdzie <remote-name> jest zwykle origin, nazwa, którą daje git pilotowi, z którego sklonowałeś. Twoi koledzy po prostu wyciągną gałąź i zostanie ona automatycznie utworzona lokalnie.

Pamiętaj jednak, że formalnie format to:

git push <remote-name> <local-branch-name>:<remote-branch-name>

Ale gdy go pominiesz, zakłada się, że obie nazwy gałęzi są takie same. Powiedziawszy to, jako słowo Uwaga, nie popełniaj krytycznego błędu w określaniu tylko :<remote-branch-name> (z dwukropkiem) lub zdalny oddział zostanie usunięty!

Tak, że kolejne git pull będzie wiedział, co robić, możesz zamiast tego chcieć użyć:

git push --set-upstream <remote-name> <local-branch-name> 

Jak opisano poniżej, --set-upstream opcja ustawia oddział upstream:

Dla każdego oddziału, który jest aktualny lub   skutecznie pchnął, dodaj upstream   (śledzenie) odniesienie, używane przez   pozbawione argumentów git-pull (1) i inne   polecenia.


3296
2017-10-05 09:29



Zauważ, że domyślnym zachowaniem git jest push pasujący Refs, więc git push <remote> nie naciskał gałęzi, jeśli nie jest obecny <remote>. - Jakub Narębski
Możesz użyć git push -u <remote-name> <branch-name> zamiast tego, aby kolejne git pull będzie wiedział, co robić. - Bart Schuller
Zamiast jawnie określać nazwę serwera, możesz po prostu użyć origin, co oznacza "serwer, z którego otrzymałem resztę tego repo": tak git push origin <branch-name>. - jpatokal
Jeśli zapomnisz użyć -u opcję, możesz po prostu wpisać git push -u następnie w oddziale git pull będzie działać. - Jan
Kładąc wszystko razem, git push -u origin <local-branch-name> jest to, co sprawdziło się u mnie. - Samo


Najpierw musisz utworzyć swój oddział lokalnie

git checkout -b your_branch

Następnie możesz pracować lokalnie w swoim oddziale, gdy będziesz gotowy do udostępnienia oddziału, popchnij go. Następne polecenie przesuwa gałąź do początkowego repozytorium zdalnego i śledzi ją

git push -u origin your_branch

Członkowie drużyny mogą dotrzeć do Twojego oddziału, wykonując:

git fetch
git checkout origin/your_branch

Możesz kontynuować pracę w gałęzi i pchać, kiedy tylko chcesz, bez przekazywania argumentów do git push (bezargumentowe naciśnięcie git popchnie master do zdalnego mastera, your_branch local do zdalnego your_branch, etc ...)

git push

Członkowie drużyny mogą naciskać na twoją gałąź, wykonując zatwierdzenia, a następnie naciskając wyraźnie

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

Lub śledzenie gałęzi, aby uniknąć argumentów do git push

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push

797
2017-07-26 01:09



Jeśli git wydaje Ci się zbyt skomplikowany, polecam Ci korzystanie z Dropbox lub Google Drive, NAPRAWDĘ, to znacznie prostsze niż git i wciąż masz wersje / etc ... - dseminara


Proste rozwiązanie Git 2.0+:

Od teraz Git 2.0 zachowanie stało się prostsze:

Możesz skonfigurować git za pomocą push.default = current aby ułatwić życie:

Dodałem to, więc teraz mogę popchnąć nową gałąź w górę

$ git push -u

-u śledzi zdalny oddział o tej samej nazwie. Nie w tej konfiguracji automatycznie odgadniesz zdalne odwołanie do polecenia git push. Od Dokumentacja git.config:

push.default 

Określa działanie git push, które należy podjąć, jeśli nie podano jawnie refspec.

push.default = current - naciśnij bieżącą gałąź, aby zaktualizować gałąź za pomocą   to samo imię na końcu odbiorczym. Działa zarówno w centralnym, jak i poza centralnym obiegu pracy.

Dla mnie jest to dobre uproszczenie mojego codziennego przepływu pracy Git. Ustawienie konfiguracyjne zajmuje się "zwykłym" przypadkiem użycia, w którym lokalnie dodaje się gałąź i chce ją utworzyć zdalnie. Mogę równie łatwo tworzyć lokalne gałęzie z pilotów, po prostu robiąc git co remote_branch_name (w przeciwieństwie do używania --set-upstream-to flaga).

Znam to pytanie, a zaakceptowane odpowiedzi są dość stare, ale zachowanie się zmieniło, więc teraz istnieją opcje konfiguracyjne, które upraszczają przepływ pracy.

Aby dodać do globalnej konfiguracji Git, uruchom to w wierszu poleceń:

$ git config --global push.default current

242
2017-11-28 09:46



znajduję git push -u origin HEAD jako odpowiedź tutaj trochę bardziej gadatliwy (piszesz to, co robisz) bez zbytniego pisania. Ponadto, a git push -u bez dodatkowych argumentów nie działa dla mnie, jeśli gałąź została utworzona -t - Qw3ry


Jak stwierdzono w poprzednich odpowiedziach,

git push <remote-name> <local-branch-name>:<remote-branch-name>

wystarczy do popchnięcia lokalnego oddziału.

Twoi koledzy mogą ciągnąć wszystkie zdalne gałęzie (w tym nowe) za pomocą tego polecenia:

git remote update

Następnie, aby wprowadzić zmiany w oddziale, zwykły przepływ:

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>

65
2017-12-27 14:12





Utwórz nowy oddział lokalnie na podstawie bieżącej gałęzi:

git checkout -b newbranch

Zatwierdź wszelkie zmiany w normalny sposób. Następnie naciśnij go w górę:

git push -u origin HEAD

Jest to skrót do przekazania bieżącej gałęzi do gałęzi o tej samej nazwie origin i śledzić, aby nie trzeba było określać origin HEAD w przyszłości.


49
2018-02-24 14:58



Pomogło to w moim przypadku: git push -u origin HEAD. Myślę, że to najbardziej przejrzysty sposób. - Scadge
Tak, nigdy nie pamiętasz, co ostatnio napisałeś jako gałąź, więc tak to jest iść. - marksyzm
@marksyzm Jeśli nie pamiętasz gałęzi, w której się znajdujesz lub jak ją nazwałeś, prawdopodobnie nie powinieneś w ogóle naciskać! Przynajmniej nie bez biegu git status pierwszy. - Zenexer
Tak, musisz upewnić się, że świat nie eksploduje podczas tego pchnięcia; Zgadzam się. - marksyzm
Jest to najbardziej efektywny sposób na utworzenie jednocześnie gałęzi śledzenia i zdalnego oddziału. Chciałbym również dodać git remote show origin Trzeci krok to wizualizacja nowej relacji śledzenia / śledzenia. - hb5fa


Jeśli chcesz po prostu utworzyć zdalny oddział bez lokalnego, możesz to zrobić tak:

git push origin HEAD:refs/heads/foo

Pcha to, co HEAD ma rozgałęziać bla który nie istniał na pilocie.


32
2017-11-25 15:29



Zrobienie tego całkowicie zdezorientowało moje Visual Studio do punktu, w którym nie uruchomiłoby się poprawnie. Eksplorator zespołu nie ładował się w ogóle, ale wszystko inne również zwróciło błędy. Po prostu dla FYI. - Josh
Wygląda na to, że powinno działać, ale kiedy faktycznie go wypróbowałem, nasz serwer gitlab nie rozpoznał wyniku jako oddziału. - JosephH
Jaka gałąź jest rozgałęziona na pilocie? Co jeśli chciałbym foo, aby odciąć się od foo2? Czy to jest możliwe? Dziękuję Ci. - user674669


Jeśli chcesz utworzyć oddział z bieżącej gałęzi

git checkout -b {your_local_branch_name} 

chcesz oddziału z oddziału zdalnego, możesz spróbować

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

Jeśli skończyłeś ze zmianami, możesz dodać plik.

git add -A or git add <each_file_names>

Następnie wykonaj zatwierdzenie na miejscu

git commit -m 'your commit message'

Kiedy chcesz przejść do zdalnego repo

git push -u origin <your_local_branch_name>

Wszyscy razem będą

git checkout -b bug_fixes 

lub Jeśli chcesz utworzyć oddział z oddziału zdalnego, powiedz rozwój 

git checkout -b bug_fixes pochodzenie/rozwój

Możesz przesłać do oddziału do zdalnego repo przez

git push -u origin **bug_fixes**

Za każdym razem, gdy chcesz zaktualizować swój oddział z dowolnego innego oddziału, powiedz mistrz.

git pull origin master.


23
2018-05-01 06:12





Najpierw utworzymy lokalnie oddział:

git checkout -b your_branch

A następnie zdalnie utworzyć gałąź:

git push --set-upstream origin your_branch

Uwaga: Działa to w najnowszych wersjach git:

$ git --version
git version 2.3.0

Twoje zdrowie!


22
2018-04-21 23:43



To tylko tekst pomocy wygenerowany przez polecenie git push kiedy twój lokalny oddział nie jest śledzony przez pilota. - nurettin


Utwórz oddział na swoim komputerze lokalnym i przełącz w tej gałęzi:

$ git checkout -b [name_of_your_new_branch]

Naciśnij gałąź na github:

$ git push origin [name_of_your_new_branch]

Jeśli chcesz coś zrobić w swojej branży, pamiętaj, aby znaleźć się w swoim oddziale.

Możesz zobaczyć wszystkie gałęzie utworzone za pomocą:

$ git branch

Które pokaże:

* approval_messages
  master
  master_clean

Dodaj nowy pilot do swojego oddziału:

$ git remote add [name_of_your_remote] 

Wciśnij zmiany z zatwierdzenia w swoim oddziale:

$ git push origin [name_of_your_remote]

Zaktualizuj swój oddział po zaktualizowaniu oryginalnej gałęzi z oficjalnego repozytorium:

$ git fetch [name_of_your_remote]

Następnie musisz złożyć wniosek o scalenie zmian, jeśli Twój oddział wywodzi się z rozwoju, który musisz wykonać:

$ git merge [name_of_your_remote]/develop

Usuń oddział w lokalnym systemie plików:

$ git branch -d [name_of_your_new_branch]

Aby wymusić usunięcie lokalnego oddziału w systemie plików:

$ git branch -D [name_of_your_new_branch]

Usuń gałąź na github:

$ git push origin :[name_of_your_new_branch]

Tutaj wszystkie informacje

Inny istniejący projekt


16
2018-05-27 11:39





Najłatwiejsze rozwiązanie ... Drumm Roll. wersja git 2.10.1 (Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes , and go a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

N.B. - Oddział, który właśnie utworzyłeś w swoim lokalnym środowisku, i zdalny, nieistniejący oddział, w którym próbujesz pushować, musi mieć to samo imię.


13
2018-03-18 06:23



Dzięki za Twoją sugestię. Mimo, że nazywasz to łatwym rozwiązaniem, wciąż myślę git push -u jest o wiele łatwiejsze. Wymaga, abyś miał jedną globalną linię konfiguracyjną, patrz stackoverflow.com/a/27185855/109305. używam git push -u stale obejmuje 99% moich zastosowań podczas pracy. - Jesper Rønn-Jensen


Teraz z git, możesz po prostu pisać, gdy jesteś we właściwej gałęzi

git push --set-upstream origin <remote-branch-name>

a git utworzy dla ciebie gałąź pochodzenia.


8
2017-10-27 17:05



-u jest skrótem od --set-upstream .. więc polecenie może być git push -u origin <nazwa-zdalnego-branch> - Uncaught Exception
fatal: "origin" nie wydaje się być repozytorium git - Dmitry Grinko
może musisz ustawić pochodzenie swojego repozytorium git - Maurizio Brioschi