Pytanie Jak przesłać nowy lokalny oddział do zdalnego repozytorium Git i śledzić je?


Chcę móc wykonać następujące czynności:

  1. Utwórz lokalny oddział na podstawie innego (zdalnego lub lokalnego) oddziału (przez git branch lub git checkout -b)

  2. Naciśnij lokalny oddział do zdalnego repozytorium (publikuj), ale je rób możliwe do śledzenia git pull i git push zadziała natychmiast.

Jak mogę to zrobić?

wiem o --set-upstream w Git 1.7, ale jest to działanie post-kreacyjne. Chcę znaleźć sposób dokonania podobnej zmiany po naciśnięciu oddziału do zdalnego repozytorium.


3657
2018-05-04 12:58


pochodzenie


możliwy duplikat Jak sprawić, by istniejący oddział git śledził zdalną gałąź? - markus
żeby wskazać - set-upstream to -u - Baiyan Huang


Odpowiedzi:


W Git 1.7.0 i nowszych możesz zamówić nowy oddział:

git checkout -b <branch>

Edycja plików, dodawanie i zatwierdzanie. Następnie naciskaj przy pomocy -u (skrót od --set-upstream) opcja:

git push -u origin <branch>

Git skonfiguruje informacje śledzenia podczas push.


5762
2018-06-03 20:50



Warto również zauważyć, że jeśli masz już oddział śledzenia ustawiony w oddziale, który naciskasz, i push.default jest ustawione na upstream, nie zrobi to, co myślisz, że to zrobi. Będzie próbował przeforsować istniejący oddział śledzenia. Posługiwać się: git push -u origin mynewfeature:mynewfeature lub zrób git branch --unset-upstream pierwszy. - void.pointer
Nadal potrzebowałem "git branch - set-upstream-to origin / remote", aby "git status" poprawnie raportował mój status oddziału w odniesieniu do odległego oddziału. - Paul Whipp
Dla osób używających Git z Visual Studio: Właściwie to jest to, że "Publikuje Branch" w Visual Studio robi. Po wykonaniu polecenia git push z parametrem -u można w końcu zobaczyć mój oddział opublikowany w interfejsie użytkownika VS. - Puterdo Borato
Czy potrzebujemy tego -u opcja za każdym razem, gdy pchamy gałąź do pilota lub potrzebujemy jej tylko za pierwszym razem? - Stephane
@Stephane Potrzebujesz tylko -u raz, aby rozpocząć śledzenie. Potem po prostu użyj git push - Todd


Jeśli nie udostępniasz repozytorium innym osobom, przydaje się to wszystko twoje gałęzie do pilota, i --set-upstream śledzenie poprawnie dla Ciebie:

git push --all -u

(Nie dokładnie to, o co prosił OP, ale ta jedna liniówka jest dość popularna)

Jeśli dzielisz się repo z innymi, to nie jest to dobra forma, ponieważ zlikwidujesz repozytorium ze wszystkimi podejrzanymi gałęziami eksperymentu.


448
2018-01-20 11:36



i git pull --all wyciąga to wszystko z powrotem w innym miejscu? kewl - commonpike
To polecenie ustawia śledzenie w odpowiedniej gałęzi bez potrzeby wciskania czegokolwiek. Dziękuję Ci. - amey91
Git pozwala zatwierdzić oddział, a nie naciskać go z bardzo dobrych powodów. Używanie git push -all jest jak upuszczenie fragmentu architektury git. Jeśli to działa dla ciebie, jest idealnie, świetnie, rób to na zawsze. Ale PROSZĘ, nie polecaj innym, aby uniknąć nauki git tylko dlatego, że jest to szybki sposób robienia rzeczy. - Federico Razzoli
To naprawdę nie jest właściwa odpowiedź i nie jest dobrym narzędziem do zalecania bez rzeczywistego wyjaśnienia, co robi i jakie są tego konsekwencje. Rozważ skorzystanie z tej odpowiedzi. - akronymn
@Federico @akronymn Gdzie można znaleźć niebezpieczeństwa robienia git push --all -u? - user1823664


Przed wprowadzeniem git push -u, nie było git push opcja uzyskania tego, czego pragniesz. Trzeba było dodać nowe instrukcje konfiguracji.

Jeśli utworzysz nową gałąź za pomocą:

$ git checkout -b branchB
$ git push origin branchB:branchB

Możesz użyć git config polecenie, aby uniknąć edycji bezpośrednio .git/config plik.

$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB

Lub możesz edytować ręcznie .git/config plik do śledzenia informacji w tej gałęzi.

[branch "branchB"]
    remote = origin
    merge = refs/heads/branchB

132
2018-05-04 13:03





Po prostu, stwórz nowy lokalny gałąź, wykonaj:

git branch <branch-name>

Aby przesunąć go do zdalny repozytorium, wykonaj:

git push -u origin <branch-name>

111
2018-04-24 12:09



git branch <branch-name> i git checkout -b <branch-name> zarówno utworzyć oddział, ale kasie przejść do nowego oddziału - Robert
nie ma nawiasów - jairhumberto
Konsola dude ma tylko wspomnieć o tym, że musisz zastąpić nazwę dowolnego odgałęzienia, które chcesz utworzyć i nacisnąć. - piyushmandovra


Nieznaczna zmiana rozwiązań już tu podanych:

  1. Utwórz lokalny oddział na podstawie innej (zdalnej lub lokalnej) gałęzi:

    git checkout -b branchname
    
  2. Przekaż lokalny oddział do zdalnego repozytorium (publikuj), ale spraw, aby był on śledzony git pull i git push zadziała natychmiast

    git push -u origin HEAD
    

    Za pomocą HEAD jest "poręcznym sposobem wypchnięcia bieżącej gałęzi do tej samej nazwy na pilocie". Źródło: https://git-scm.com/docs/git-push W Git terms, HEAD (wielkimi literami) jest odniesieniem do początku bieżącej gałęzi (drzewa).

    The -u opcja jest krótka --set-setupstream. Spowoduje to dodanie referencyjnego śledzenia śledzenia dla bieżącego oddziału. możesz to sprawdzić, szukając w pliku .git / config:

    Enter image description here


55
2017-07-05 08:13



Dziękuję Ci :) git push -u origin <branch-name> nie działa dla mnie, ale używa HEAD zamiast <branch-name> działało idealnie :) - Daniel Tonon
Ten działa dla mnie. Górna odpowiedź nie działa. - jdhao
kocham HEAD - zbyt leniwy, by pisać ;-) - user776686
@ user776686 musisz wiedzieć, co właśnie tam zrobiłeś, prawda? - Yatrix
Uwielbiam tę odpowiedź - pisanie "HEAD" jest o wiele łatwiejsze niż wpisanie pełnej nazwy (często długiej lub zawiłej) nazwy oddziału. - JKubecki


Przypuszczam, że już sklonowałeś projekt, taki jak:

git clone http://github.com/myproject.git
  1. Następnie w lokalnej kopii utwórz nowy oddział i sprawdź go:

    git checkout -b <newbranch>
    
  2. Przypuśćmy, że stworzyłeś "git bare --init" na swoim serwerze i utworzyłeś plik myapp.git, powinieneś:

    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
    
  3. Potem użytkownicy powinni mieć możliwość

    git clone http://example.com/var/git/myapp.git
    

UWAGA: Zakładam, że masz już uruchomiony serwer. Jeśli nie, to nie zadziała. Dobry poradnik tutaj.

DODANY

Dodaj zdalny oddział:

git push origin master:new_feature_name

Sprawdź, czy wszystko jest w porządku (pobierz źródło i wylistuj odległe gałęzie):

git fetch origin
git branch -r

Utwórz lokalny oddział i śledź zdalny oddział:

git checkout -tb new_feature_name origin/new_feature_name

Zaktualizuj wszystko:

git pull

27
2018-05-04 13:04



Skrypt Williama, do którego się przyłączyłem, robi to samo z dodatkową opcją usuwania odległych gałęzi i niektórych zabezpieczeń - Tobias Kienzler
> Przekazanie lokalnego oddziału do zdalnego repo (publikowanie), ale spraw, aby było> śledzone, więc git pull i git push będą działać natychmiast. to, co github robi automatycznie po włożeniu kodu do repozytorium :-) - VP.
To nie odpowiada na pytanie, <nowa gałąź> oryginalnego repo nie jest śledzona (i jest zmieniana na <master> to nowe repo, które sklonowałeś w kroku 3). - Lohrun
wydaje się trochę przesadą. robi git remote add origin sprawić, by lokalny oddział był śledzony? czy to tutaj jest kluczowe polecenie? - Roni Yaniv
@Roni Yaniv: nie git remote add origin rejestruj tylko nowe zdalne repozytorium. Jest to tylko krok potrzebny przed popchnięciem gałęzi do tego zdalnego repozytorium (jeśli nie chcesz wpisywać całego adresu za każdym razem) - Lohrun


Po prostu to robię

git push -u origin localBranch:remoteBranchToBeCreated

nad już sklonowanym projektem.

Git tworzy nową gałąź o nazwie remoteBranchToBeCreated pod moimi zobowiązaniami localBranch.


24
2018-03-20 11:13