Jak utworzyć zdalny oddział Git?


3128

Utworzyłem lokalny oddział, który chcę „przepchnąć” w górę. Podobne pytanie dotyczy przepełnienia stosu, jak śledzić nowo utworzoną gałąź zdalną.

Jednak mój przepływ pracy jest nieco inny. Najpierw chcę utworzyć lokalny oddział i zepchnę go wcześniej, gdy będę zadowolony i chcę udostępnić mój oddział.

  • Jak mam to zrobić? (moje wyszukiwania w Google nic nie wymyśliły).
  • Jak mam powiedzieć moim kolegom, aby wyciągnęli go z repozytorium nadrzędnego?

AKTUALIZACJA W Git 2.0 istnieje prostsza odpowiedź, którą napisałem poniżej: https://stackoverflow.com/a/27185855/109305


14
czy ktoś kiedykolwiek odpowiedział na twoje drugie pytanie? >> I jak mam powiedzieć moim kolegom, aby wyciągnęli go z repozytorium nadrzędnego?
— milkplus


1
@milkplus get fetch --allpobiera nowe gałęzie po stronie zdalnej (ale tylko get fetch --prunelokalnie usuwa odniesienia do usuniętych gałęzi zdalnych). Myślę, że albo to powinno być ustawione przez nich automatycznie, albo musisz z nimi porozmawiać ustnie.
— peterh - Przywróć Monikę

Odpowiedzi:


3732

Najpierw tworzysz swój oddział lokalnie:

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

Oddział zdalny jest tworzony automatycznie po przekazaniu go do zdalnego serwera. Więc kiedy czujesz się na to gotowy, możesz po prostu:

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

Gdzie <remote-name>zwykle jest originnazwa, którą git nadaje pilotowi, z którego sklonowałeś. Twoi koledzy po prostu ściągną tę gałąź i zostanie ona automatycznie utworzona lokalnie.

Należy jednak pamiętać, że formalnie format jest następujący:

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

Ale jeśli pominiesz jeden, zakłada się, że obie nazwy gałęzi są takie same. Powiedziawszy to, jako ostrzeżenie , nie popełniaj krytycznego błędu, określając tylko :<remote-branch-name>(z dwukropkiem), w przeciwnym razie gałąź zdalna zostanie usunięta!

Aby kolejny git pullwiedział, co robić, możesz zamiast tego użyć:

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

Jak opisano poniżej, --set-upstreamopcja ustanawia odgałęzienie:

Do każdej gałęzi, która jest aktualna lub została pomyślnie wysłana, dodaj referencję upstream (śledzenia), używaną przez bez argumentów git-pull (1) i inne polecenia.


85
Zauważ, że domyślnym zachowaniem git jest wypychanie pasujących odnośników, więc git push <remote>nie wypychałoby gałęzi, jeśli nie jest obecne <remote>.
— Jakub Narębski

222
Możesz użyć git push -u <remote-name> <branch-name>zamiast tego, aby kolejny git pullwiedział, co robić.
— Bart Schuller,

87
Zamiast jawnego podawania nazwy serwera, możesz po prostu użyć origin, co oznacza „serwer, z którego mam resztę repozytorium”: w ten sposób git push origin <branch-name>.
— lambshaanxy

68
Jeśli zapomnisz użyć tej -uopcji, możesz po prostu wpisać git push -upóźniej w oddziale, a następnie git pullzadziała.
— Jan

89
Wszystko git push -u origin <local-branch-name>to działało dla mnie.
— Samo

880

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, aby udostępnić gałąź, popchnij ją. Następne polecenie wypycha gałąź do źródła zdalnego repozytorium 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 pchanie, kiedy chcesz, bez przekazywania argumentów do git push (bez argumentów git push popchnie master do zdalnego master, twoja gałąź lokalna do zdalnej twojej gałęzi itp.)

git push

Koledzy z drużyny mogą naciskać na twój oddział, wykonując zatwierdzenia, a następnie pchać jawnie

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

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

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

Czy istnieje sposób utworzenia zdalnego oddziału bez tworzenia lokalnego oddziału o tej samej nazwie?
— Ariel Gabizon

330

Proste rozwiązanie Git 2.0+:

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

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

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

$ git push -u

-ubędzie śledzić zdalną gałąź o tej samej nazwie. Teraz w tej konfiguracji automatycznie zgadniesz zdalne odniesienie do git push. Z dokumentacji git.config :

push.default

Określa akcję, którą powinien podjąć git push, jeśli nie podano jawnie refspec.

push.default = current- naciśnij bieżącą gałąź, aby zaktualizować gałąź o tej samej nazwie na końcu odbierającym. Działa zarówno w centralnym, jak i niecentralnym przepływie pracy.

Dla mnie jest to dobre uproszczenie mojego codziennego przepływu pracy w Git. Ustawienie konfiguracji zajmuje się „zwykłym” przypadkiem użycia, w którym dodajesz oddział lokalnie i chcesz go utworzyć zdalnie. Mogę również równie łatwo tworzyć lokalne oddziały z pilotów, po prostu robiąc git co remote_branch_name(w przeciwieństwie do używania --set-upstream-toflagi).

Wiem, że to pytanie, a akceptowane odpowiedzi są dość stare, ale zachowanie się zmieniło, dzięki czemu istnieją teraz opcje konfiguracji upraszczające przepływ pracy.

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

$ git config --global push.default current

5
Uważam, że git push -u origin HEADodpowiedź tutaj jest nieco bardziej szczegółowa (piszesz, co robisz), nie będąc zbyt wielkim, by pisać. Ponadto, git push -ubez dodatkowych argumentów nie działałoby dla mnie, jeśli gałąź została utworzona za pomocą-t
— Qw3ry

git config --global push.default upstream && git checkout -b foo && <change a file> && git push -unie działa (od git 2.19.1); Push wymaga argumentów zdalnego i rozgałęzienia.
— knite

Czy mógłbyś rozwinąć to, co masz na myśli git co remote_branch_name?
— flannelbeard

84

Jak stwierdzono w poprzednich odpowiedziach,

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

wystarczy do wypchnięcia lokalnego oddziału.

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

git remote update

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

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

Podoba mi się, ponieważ pozwala na to, by nazwa zdalna była inna niż nazwa lokalna
— Ariel Gabizon

66

Utwórz nowy oddział lokalnie w oparciu o bieżący oddział:

git checkout -b newbranch

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

git push -u origin HEAD

Jest to skrót do wypchnięcia bieżącej gałęzi do gałęzi o tej samej nazwie origini śledzenia, abyś nie musiał określać origin HEADw przyszłości.


4
Pomogło to w moim przypadku: git push -u origin HEAD. Myślę, że to najbardziej klarowny sposób.
— Scadge

2
Tak, nigdy nie pamiętasz dokładnie tego, co ostatnio wpisałeś jako gałąź, więc jest to właściwy sposób.
— marksyzm

4
@marksyzm Jeśli nie pamiętasz, na której gałęzi się znajdujesz lub jak ją nazwałeś, prawdopodobnie nie powinieneś naciskać! Przynajmniej nie bez git statuspierwszego uruchomienia .
— Zenexer,

1
Tak, muszę się upewnić, że świat nie eksploduje podczas tego pchnięcia; Zgadzam się.
— marksyzm

1
Jest to najbardziej efektywny sposób na jednoczesne utworzenie gałęzi śledzenia oraz gałęzi zdalnej. Chciałbym również dodać git remote show originjako trzeci krok, aby zobrazować nową relację śledzenia / śledzenia.
— hb5fa

54

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

git checkout -b {your_local_branch_name} 

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

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

Jeśli skończysz ze zmianami, możesz dodać plik.

git add -A or git add <each_file_names>

Następnie wykonaj zatwierdzenie lokalnie

git commit -m 'your commit message'

Gdy chcesz przełączyć się na zdalne repozytorium

git push -u origin <your_local_branch_name>

Wszystko razem będzie

git checkout -b bug_fixes 

lub Jeśli chcesz utworzyć oddział ze zdalnego oddziału, powiedz programowanie

git checkout -b poprawki_błędów pochodzenie / rozwój

Możesz przekazać do oddziału w celu 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 master .

git pull origin master.


46

Jeśli chcesz po prostu utworzyć oddział zdalny bez lokalnego, możesz to zrobić w następujący sposób:

git push origin HEAD:refs/heads/foo

Pcha cokolwiek, co jest w twojej głowie, aby rozgałęzić foo, które nie istniały na pilocie.


Wykonanie tego całkowicie pomieszało moje Visual Studio do tego stopnia, że ​​nie uruchomiłoby się poprawnie. Team Explorer w ogóle się nie ładował, ale wszystko inne poszło też w błąd, rzucając błędy. Po prostu dla ciebie.
— Josh

Wygląda na to, że powinno działać, ale kiedy go wypróbowałem, nasz serwer gitlab nie rozpoznał wyniku jako gałęzi.
— JosephH

Jakiej gałęzi jest odgałęzienie na pilocie? Co jeśli chciałbym foo oddzielić od foo2? Czy to jest możliwe? Dziękuję Ci.
— user674669,

Działa również na serwerze gerrit, tworząc nowy oddział na pilocie, który nie istniał przed tym poleceniem.
— MichaelZ

33

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

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

Uwaga - Oddział, który właśnie utworzyłeś w środowisku lokalnym, oraz nieistniejący zdalny oddział, w którym próbujesz pchać, musi mieć tę samą nazwę .


3
Dzięki za Twoją sugestię. Nawet jeśli nazywasz to łatwym rozwiązaniem, nadal uważam, że git push -ujest o wiele łatwiejsze. Wymaga posiadania jednej globalnej linii konfiguracji, patrz stackoverflow.com/a/27185855/109305 . Używam git push -ustale, to pokrywa 99% moich przypadków użycia podczas pracy.
— Jesper Rønn-Jensen

29

[Szybka odpowiedź]

Możesz to zrobić w 2 krokach:

1. Użyj checkoutdo utworzenia lokalnego oddziału:

git checkout -b yourBranchName

2. Użyj pushpolecenia, aby automatycznie utworzyć gałąź i wysłać kod do zdalnego repozytorium:

git push -u origin yourBanchName

Są różne sposoby na zrobienie tego, ale myślę, że ten sposób jest naprawdę prosty.


1
Szybko i do rzeczy!
— Dev

26

Najpierw utwórz oddział lokalnie:

git checkout -b your_branch

A następnie zdalnie utworzyć oddział:

git push --set-upstream origin your_branch

Uwaga: Działa to w najnowszych wersjach git:

$ git --version
git version 2.3.0

Twoje zdrowie!


Jest to tylko tekst pomocy generowany przez polecenie, git pushgdy lokalny oddział nie jest śledzony zdalnie.
— nurettin

18

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

$ git checkout -b [name_of_your_new_branch]

Wciśnij gałąź na github:

$ git push origin [name_of_your_new_branch]

Jeśli chcesz coś zatwierdzić w swoim oddziale, pamiętaj, aby być w swoim oddziale.

Możesz zobaczyć wszystkie oddziały utworzone za pomocą:

$ git branch

Który pokaże:

* approval_messages
  master
  master_clean

Dodaj nowego pilota do swojego oddziału:

$ git remote add [name_of_your_remote] 

Przekaż zmiany ze swojego zatwierdzenia do swojego oddziału:

$ git push origin [name_of_your_remote]

Zaktualizuj swój oddział, gdy oryginalny oddział z oficjalnego repozytorium zostanie zaktualizowany:

$ git fetch [name_of_your_remote]

Następnie musisz złożyć wniosek o scalenie zmian, jeśli twoja gałąź wywodzi się z rozwoju, musisz:

$ git merge [name_of_your_remote]/develop

Usuń gałąź 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łąź z github:

$ git push origin :[name_of_your_new_branch]

Tutaj wszystkie informacje

Inne istniejące projekty


14

Tworzenie gałęzi lokalnej z istniejącej gałęzi (może być master / develop / any-other-branch).

git checkout -b nazwa_oddziału

Wciśnij to do pilota

git push -u nazwa_graniczna_lokalna nazwa_gałęziowa_zdalna: nazwa_gałęziowa zdalna

Tutaj,

  1. -u: ustawia gałąź nadrzędną
  2. nazwa_zdalna: git ustawia domyślnie nazwę na „pochodzenie” podczas tworzenia repozytorium. Można to jednak zmienić na inną dowolną nazwę.
  3. local_branch_name: to nazwa oddziału lokalnego, który ma zostać przekazany.
  4. remote_branch_name: to nazwa zdalnego oddziału, który chcemy utworzyć na zdalnym.

Jeśli usuniemy lokalne i zdalne nazwy oddziałów, będą miały format

git push -u nazwa_zdalna nazwa_oddziału

Spowoduje to wypchnięcie oddziału lokalnego do zdalnego i o tej samej nazwie, co oddział lokalny nazwa_oddziału. Oddział lokalny będzie również śledził oddział zdalny.


10

Wiem, że dobrze odpowiedzieliśmy na to pytanie, ale chciałem tylko wymienić kroki, które podejmuję, aby utworzyć nową gałąź „myNewBranch” i wcisnąć zdalnie (w moim przypadku „origin”) i skonfigurować śledzenie. Rozważ to w wersji „TL; DR” :)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch

8

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

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

i git stworzy dla ciebie gałąź pochodzenia.


1
-u jest skrótem od --set-upstream .., więc komenda może być git push -u origin <nazwa-zdalnej-gałęzi>
— Uncaught Exception

fatal: „origin” nie wydaje się być repozytorium git
— Dmitry Grinko

być może musisz ustawić pochodzenie swojego repozytorium git
— Maurizio Brioschi,

8

Chciałem tylko dodać, że:

git checkout -b {branchName}

Tworzy nowy oddział, sprawdza również ten oddział / czyni go Twoim bieżącym oddziałem. Jeśli z jakiegoś powodu wszystko, co chcesz zrobić, to oderwać gałąź, ale nie ustawić jej jako bieżącej gałęzi, możesz użyć następującego polecenia:

git branch {branchName}

W pierwszym poleceniu „checkout” czyni z tej gałęzi bieżącą gałąź, a „-b” oznacza: ta gałąź jeszcze nie istnieje, więc zrób to dla mnie.


6

Jak to zrobić poprzez Drzewo Źródłowe

 1: Open SourceTree, click on Repository -> Checkout
 2 :Click on Create New Branch
 3: Select branch where from you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push button)

5

git push -u <remote-name> <branch-name>nie działa, jeśli nowo utworzona gałąź nie jest spawnowana z tego samego repozytorium, tj. jeśli nie utworzyłeś nowej gałęzi przy użyciu git checkout -b new_branch, to nie zadziała.

Na przykład sklonowałem lokalnie dwa różne repozytoria i musiałem skopiować repo2 / branch1 do repo1 /, a następnie też je wypchnąć.

Ten link pomógł mi przesłać mój oddział lokalny (sklonowany z innego repozytorium) do mojego zdalnego repozytorium:


3

Oto jak to zrobić zaćmieniem poprzez Egit.

1) Przejdź do widoku „Eksploracja repozytorium git” i eksploruj projekt git, w którym chcesz utworzyć gałąź. W obszarze Brances -> Local .. wybierz gałąź, dla której chcesz utworzyć gałąź (w moim przypadku wybrałem master .. możesz wybrać inną gałąź, jeśli chcesz) .. następnie kliknij prawym przyciskiem myszy i kliknij opcję Utwórz gałąź. i wybierz opcję kasy tego projektu, a następnie kliknij przycisk Zakończ.

2) Teraz z eksploratora projektu wybierz projekt .. kliknij prawym przyciskiem myszy, a następnie Zespół -> Oddział Push.

Zostanie utworzona nowa gałąź zdalna. Możesz podać nazwę oddziału swoim kolegom, aby mogli go pobrać.


Styczne ostrzeżenie o Egit - i wszystkich klientach opartych na JGit, AFAIK: nie obsługują atrybutów .git! Oznacza to, że jeśli Twój zespół używa kombinacji Windows (CRLF) i Linux / OSX (LF), musisz zawsze polegać na tym, że każdy klient ma odpowiednie ustawienia. Oczywiście lepiej jest centralnie zarządzać zakończeniami linii na poziomie repo lub projektu, a obsługiwanym sposobem jest .gitattributes. Więc jeśli nie musisz absolutnie używać Egit ... nie rób tego! :)
— tydzień

2

Użyłem dwóch sposobów, aby utworzyć oddział

Jeśli używasz TortoiseGit, wykonaj następujące kroki: -

1. Utwórz oddział za pomocą TortoiseGit

Kliknij prawym przyciskiem myszy swój projekt >>> TortoiseGit >>> Utwórz gałąź >>> wpisz nazwę gałęzi i wybierz gałąź podstawową, a następnie naciśnij ok

2. Wciśnij gałąź

Kliknij projekt prawym przyciskiem myszy >>> TortoiseGit >>> naciśnij >>> kliknij OK

3. Przejdź do nowego oddziału

Kliknij projekt prawym przyciskiem myszy >>> TortoiseGit >>> Switch / Checkout >>> wybierz nowo utworzony oddział i naciśnij OK

Jeśli używasz wiersza polecenia, wykonaj następujące kroki: -

1. Utwórz oddział za pomocą wiersza polecenia

$ git Checkout -b nowa_nazwa_gałęzi

2. Wciśnij gałąź

$ git push origin new_branch_name

3.Przejdź do nowej gałęzi, która już przełączy się na nową_nazję_gałęzi, w przeciwnym razie możesz jej użyć

$ git Checkout new_branch_name


0

Korzystam z tego i jest to całkiem przydatne:

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

Zastosowanie: git mkdir NEW_BRANCH

Nie potrzebujesz nawet statusu git; może chcę tylko upewnić się, że wszystko idzie dobrze ...

Możesz mieć ZARÓWNO LOKALNIE i ZDALNIE jednym poleceniem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.