Jak skopiować lokalny oddział Git do zdalnego repozytorium

127

Do tej pory wykonałem następujące kroki:

  1. Sklonowano zdalne repozytorium Git
  2. Rozgałęziono gałąź główną na eksperymentalną
  3. edytowany / testowany / zatwierdzony kod w gałęzi eksperymentalnej

Teraz nie jestem gotowy na połączenie eksperymentu z nadrzędnym. Chcę jednak przenieść go z powrotem do zdalnego repozytorium, ponieważ jest to repozytorium, które udostępniam kilku współpracownikom. Chciałbym, żeby zobaczyli, co zrobiłem w gałęzi eksperymentalnej. Zwykle uzyskuję dostęp do zdalnego repozytorium przez SSH.

Jak udostępnić lokalny oddział w zdalnym repozytorium bez wpływu na główną gałąź zdalnego repozytorium?

Coocoo4Cocoa
źródło
Ten link jest również bardzo przydatny w tym aspekcie. Udostępnianie oddziałów git
Vishnu Kumar

Odpowiedzi:

157

Według strony podręcznika git push :

 git push origin experimental

Znajdź odniesienie, które pasuje experimentalw repozytorium źródłowym (najprawdopodobniej znajdzie refs/heads/experimental) i zaktualizuj tym samym ref (np. refs/heads/experimental) W repozytorium pochodzenia.
Gdyby experimentalnie istniał zdalnie, zostałby stworzony .

To jest to samo, co:

git push origin experimental:refs/heads/experimental

Utwórz gałąź experimentalw repozytorium pochodzenia, kopiując bieżącą experimentalgałąź.
Ten formularz jest potrzebny tylko do utworzenia nowej gałęzi lub tagu w zdalnym repozytorium, gdy nazwa lokalna i nazwa zdalna są różne ; w przeciwnym razie nazwa ref będzie działać sama.

Lub, jak wspomniano we wskazówce git , możesz skonfigurować „Domyślny pilot oddziału”:

Możesz użyć git config, aby przypisać domyślnego pilota do danej gałęzi. Ten domyślny pilot zostanie użyty do wypchnięcia tej gałęzi, chyba że określono inaczej.

Jest to już zrobione za Ciebie, gdy używasz git clone, umożliwiając użycie git push bez żadnych argumentów do wypchnięcia lokalnej gałęzi głównej w celu zaktualizowania gałęzi głównej repozytorium pochodzenia.

git config branch.<name>.remote <remote> 

można użyć, aby określić to ręcznie.


Jan sugeruje (dla git> = 1.7.0 ) do push -u(lub push --set-upstreamopcja):

Dla każdej gałęzi, która jest aktualna lub pomyślnie wypchnięta, dodaj odwołanie nadrzędne (śledzące), używane przez bezargumentowe git-pull (1) i inne polecenia.

W ten sposób nie musisz wykonywać żadnej konfiguracji git.

git push -u origin experimental
VonC
źródło
12
Powinieneś użyć -uopcji dla, pushaby upewnić się, że lokalny oddział śledzi zdalny oddział po jego upublicznieniu. Jeśli zapomnisz skorzystać z -uopcji, możesz po prostu wpisać git push -upóźniej w gałęzi, a wtedy git pullzadziała.
stycznia 2011
Zauważyłem, że kiedy to zrobisz git push origin experimental, nie ma dowodów na to, że przesyłane są jakiekolwiek pakiety. Wygląda na to, że pilot ma już cały materiał z poprzedniego naciśnięcia; po prostu musi być podpięty do sędziów .
Kaz
@Kaz: miałby cały materiał, gdyby te nowe zatwierdzenia zostały już przesłane w innej gałęzi na zdalnym. W takim przypadku git push origin experimentalwystarczy utworzyć gałąź experimentalna pilocie.
VonC
Dziękuję Ci! Twoja odpowiedź była bardzo pomocna.
hakre
15

Jeśli nazwa twojego oddziału to experimental, a nazwa pilota to origin, to jest

git push origin experimental
John Douthat
źródło
Taki sam komentarz jak powyżej, ale czy tworzy to niejawnie gałąź eksperymentalną w zdalnym repozytorium, czy też przesyła do zdalnego mastera?
Coocoo4Cocoa
1
popycha gałąź eksperymentalną i nie dotyka mastera ani po stronie lokalnej, ani zdalnie
John Douthat
1

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 lokalny oddział (sklonowany z innego repozytorium) do mojego zdalnego repozytorium:

złamana stopa
źródło
0

Oto autorytatywna strona github do zdalnego zarządzania github http://github.com/guides/push-a-branch-to-github . Pomoże Ci odpowiedzieć na wszystkie Twoje pytania.

dylanfm
źródło
Czy to nie przenosi go do gałęzi głównej, czy też niejawnie utworzy źródło / tę samą_nazwa_branch_as_local?
Coocoo4Cocoa
0

tl; dr

$ git push --set-upstream origin your_new_branch

więcej informacji

po wykonaniu kilku zatwierdzeń w:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

wypychasz swoją gałąź, określając upstream do jednego z repozytoriów pilotów, takich jak:

$ git push --set-upstream REMOTE YOUR_BRANCH

piloty można zobaczyć

$ git remote -v

zwykle będziesz mieć jednego domyślnego pilota origin. więc polecenie wyglądałoby następująco:

$ git push --set-upstream origin your_new_branch

a wszystkie następcze pchnięcia można wykonać tylko za pomocą git push.

Ivan Prisyazhnyy
źródło