W Git, jaka jest różnica między origin / master a origin master?


290

Wiem, pochodzenie jest terminem określającym zdalne repozytorium, a master jest tam gałęzią.

Celowo pomijam tutaj „kontekst” i mam nadzieję, że odpowiedź nie powinna zależeć od kontekstu. Więc w wierszach poleceń git jaka jest różnica między origin / master a origin master . Czy istnieje niejednoznaczny sposób na zrozumienie, kiedy używać źródła / wzorca, a kiedy powinienem używać źródła wzorca ?


Odpowiedzi:


392

Są tu właściwie trzy rzeczy: origin masterdwie oddzielne rzeczy i origin/masterjedna rzecz. Łącznie trzy rzeczy.

Dwie gałęzie:

  • master jest oddziałem lokalnym
  • origin/masterto gałąź zdalna (która jest lokalną kopią gałęzi o nazwie „master” na pilocie o nazwie „origin”)

Jeden pilot:

  • origin jest pilotem

Przykład: pociągnij dwa kroki

Ponieważ origin/masterjest to gałąź, możesz ją połączyć. Oto dwa kroki:

Krok pierwszy, pobierz masterz pilota origin. masterOddział na originzostanie pobrana i lokalna kopia będzie się nazywać origin/master.

git fetch origin master

Następnie łączysz się origin/masterz master.

git merge origin/master

Następnie możesz przesunąć swoje nowe zmiany z masterpowrotem do origin:

git push origin master

Więcej przykładów

Możesz pobrać wiele oddziałów według nazwy ...

git fetch origin master stable oldstable

Możesz scalić wiele oddziałów ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290

5
Pierwsza część jest naprawdę przydatna. Nie mogłem połączyć, w jaki sposób można zastosować więcej przykładów, zwłaszcza jeden scalający. Dziękuję za odpowiedź.
Senthil Kumaran,

1
... ponieważ kiedy „zaczynam kasę origin / master”, przechodzę w stan odłączonej głowy. Jeśli rzeczywiście mam lokalną kopię zdalnej gałęzi głównej, dlaczego nie mogę pracować, zatwierdzać i dodawać do niej? A może mogę, ale dlaczego jest to oderwane?
stu

3
Możesz przypisać tylko do lokalnego oddziału, więc kiedy wypisujesz zdalny oddział, dostajesz „odłączoną głowę”. Oczywiście jest to lokalna kopia oddziału zdalnego, ale nadal jest to oddział zdalny. Nie ma zasady, że „master” jest w ogóle związany z „origin / master”, mogą być zupełnie inne.
Dietrich Epp

7
@ Jwan622 „origin to zdalne”… „origin” to tylko nazwa, możesz wybrać dowolną nazwę dla pilotów, ale „origin” to nazwa domyślna. Pilot to repozytorium gdzie indziej. Może to być GitHub lub inny komputer, a nawet inny komputer na tym samym komputerze.
Dietrich Epp

2
@ Jwan622: „git remote add” to polecenie, które tworzy nowy pilot. „origin” to nazwa dodana przez pilota. Ponieważ „pochodzenie” to tylko nazwa, możesz wybrać inną nazwę, jeśli chcesz. Na przykład git remote add home my-server:projects/my-projectdodaje pilota o nazwie „home”. Możesz zapoznać się z dokumentacją: git-scm.com/docs/git-remote
Dietrich Epp

16

origin/masterto byt (ponieważ nie jest to gałąź fizyczna) reprezentujący stan mastergałęzi na pilocie origin.

origin masterto gałąź masterna pilocie origin.

Mamy więc te:

  • origin / master (reprezentacja lub wskaźnik do zdalnej gałęzi)
  • master - ( faktyczny oddział )
  • <Twoja_lokalna_gałęzi> ( faktyczny oddział )
  • <Twoja_lokalna_oddział2> ( faktyczny oddział )
  • <Twoja_lokalna_oddział3> ( faktyczny oddział )

Przykład (w oddziale lokalnym master):

git fetch # get current state of remote repository
git merge origin/master # merge state of remote master branch into local branch
git push origin master # push local branch master to remote branch master

24
To jest niepoprawne ... origin masterto nie gałąź ... to w rzeczywistości dwie osobne rzeczy: „origin” (zdalny) i „master” (lokalny oddział).
Dietrich Epp,

Stan zdalnej gałęzi głównej jest obecny lokalnie, prawda?
Senthil Kumaran,

4
tak, to jest niepoprawne, origin/masterzdalna gałąź główna Lokalny oddział jest tylko mistrzem.
Aniket Thakur,

5

origin/masterjest zdalną mastergałęzią

Zwykle po zrobieniu a, git fetch originaby przynieść wszystkie zmiany z serwera, zrobiłbyś a git rebase origin/master, aby wprowadzić zmiany w bazie i przenieść gałąź do najnowszego indeksu. Odnosi się tutaj origin/masterdo gałęzi zdalnej, ponieważ w zasadzie mówisz GIT, aby opierała origin/mastergałąź na bieżącej gałęzi.

Należałoby użyć origin masterpodczas pchania, na przykład. git push origin masterpo prostu mówi GIT, aby wypchnął do zdalnego repozytorium masteroddział lokalny .


2
To wydaje się być najbliższe temu, czego szukał OP - origin mastermówi oprogramowaniu, aby zrobiło coś z tym, co znajduje się na „master” w repozytorium „origin”. origin/masterjest referencją w ten sam sposób f3a4d5lub HEADjest.
Nemesarial

4

origin to nazwa zdalnego adresu git. Poniżej może znajdować się wiele innych pilotów.

bangalore => bangalore.example.com:project.git

boston => boston.example.com:project.git

jeśli chodzi o origin / master (przykład bangalore / master), to wskaźnik do „master” zatwierdzenia na stronie bangalore . Widzisz to w swoim klonie.

Możliwe, że zdalny bangalore posunął się naprzód, ponieważ wykonałeś „pobieranie” lub „ściąganie”


2

Biorąc pod uwagę fakt, że możesz przełączyć się na origin/master(chociaż w stanie odłączonym), gdy kabel sieciowy jest odłączony, musi to być lokalna reprezentacja masteroddziału w origin.


W odpowiedziach powyżej i poniżej ludzie mówią, że origin / master jest zdalną gałęzią master. Twoja odpowiedź jest w pewnym sensie sprzeczna z tym, co mówią. Proszę wyjaśnij.
Luna Lovegood
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.