Rozgałęzienia Git: master vs. origin / master vs. remotes/ origin/master
Myślę, że jestem na dobrej drodze, aby zrozumieć podstawowe pojęcia Gita.
Już skonfigurowałem i sklonowałem zdalne repozytorium. Utworzyłem również puste repozytorium po stronie serwera i połączyłem z nim moje lokalne repozytorium.
Mój problem polega na tym, że nie rozumiem różnicy między:
- origin / master vs. piloty / origin / master
O ile rozumiem, master jest lokalną gałęzią, a remotes/origin/master jest odległą gałęzią.
Ale czym dokładnie jest origin / master ?
6 answers
Weź klon Zdalnego repozytorium i uruchom git branch -a
(aby pokazać wszystkie gałęzie, o których git wie). Prawdopodobnie będzie to wyglądało mniej więcej tak:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
Tutaj, master
jest gałęzią w lokalnym repozytorium. remotes/origin/master
jest gałęzią o nazwie {[4] } na zdalnym o nazwie origin
. Można to nazwać albo origin/master
, jak w:
git diff origin/master..master
Możesz również odnieść się do niego jako remotes/origin/master
:
git diff remotes/origin/master..master
Są to tylko dwa różne sposoby odwoływania się do tej samej rzeczy (nawiasem mówiąc, oba te polecenia oznacza " Pokaż mi zmiany pomiędzy odległą gałęzią master
i moją gałęzią master
).
remotes/origin/HEAD
jest default branch
dla pilota o nazwie origin
. To pozwala po prostu powiedzieć origin
zamiast origin/master
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 17:56:41
Krótka odpowiedź dla manekinów takich jak ja (skradzionych z Torek):
- pochodzenie / master jest "gdzie mistrz był tam ostatni raz, kiedy sprawdzałem"
- mistrz jest "gdzie mistrz jest tutaj w oparciu o to, co robiłem"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-17 05:48:08
Technicznie rzecz biorąc, nie ma żadnych "zdalnych" rzeczy w ogóle1 w Twoim Git repo, są tylko lokalne nazwy, które powinny odpowiadać nazwom na innym, innym repo. Te o nazwie origin/whatever
będą początkowo pasować do tych z repo, które sklonowałeś-od:
git clone ssh://some.where.out.there/some/path/to/repo # or git://some.where...
Tworzy lokalną kopię innego repo. Po drodze notuje wszystkie gałęzie, które tam były, oraz commity, do których się odnoszą, i umieszcza je w Twoim lokalnym repo pod nazwami refs/remotes/origin/
.
W zależności od tego, jak długo przejdziesz przed git fetch
lub równoważny do aktualizacji " moja kopia tego, co jest niektóre.gdzieWynocha.tam", mogą zmieniać swoje gałęzie, tworzyć nowe i usuwać niektóre. Kiedy wykonasz swoją git fetch
(lub git pull
, która jest naprawdę fetch plus merge), Twój repo zrobi kopie swojej nowej pracy i zmieni wszystkie wpisy refs/remotes/origin/<name>
w razie potrzeby. To ten moment fetch
ing sprawia, że wszystko się zgadza (cóż, to, i początkowy klon, i niektóre przypadki push
ing również-w zasadzie zawsze, gdy Git ma szansę sprawdzić-ale patrz zastrzeżenie poniżej).
Git zwykle odnosi się do swoich refs/heads/<name>
jako po prostu <name>
, a te odległe jako origin/<name>
, i to wszystko działa, ponieważ jest oczywiste, który z nich jest który. Czasami możliwe jest tworzenie własnych nazw gałęzi, które sprawiają, że nie jest to oczywiste, ale nie martw się tym, dopóki do tego nie dojdzie. :- ) Po prostu daj Gitowi najkrótszą nazwę, która sprawia, że jest to oczywiste, i będzie od tego: origin/master
jest "gdzie mistrz był tam ostatni raz sprawdzałem", i master
jest "gdzie mistrz jest tutaj na podstawie tego, co robiłem". Uruchom git fetch
, aby zaktualizować Git na "where master is over there" w razie potrzeby.
Zastrzeżenie: w wersjach Git starszych niż 1.8.4, git fetch
posiada kilka trybów, które nie aktualizują" where master is over there " (dokładniej, tryby, które nie aktualizują żadnych gałęzi zdalnego śledzenia). Running git fetch origin
, or git fetch --all
, or even just git fetch
, czy aktualizuje. Bieganie git fetch origin master
Nie . Niestety, ten tryb "nie aktualizuje" jest wyzwalany przez zwykłe git pull
. (Jest to głównie drobna irytacja i jest naprawiona w Git 1.8.4 i późniejszych.)
1Cóż, jest jedna rzecz, która nazywa się "pilotem". Ale to też lokalne! Nazwa origin
jest rzeczą, którą Git nazywa "pilotem". Jest to w zasadzie tylko krótka nazwa adresu URL, którego użyłeś podczas klonowania. Stąd też pochodzi origin
W origin/master
. Nazwa origin/master
nazywa się remote-tracking branch , który czasami jest skracany do "remote branch", szczególnie w starszej lub bardziej nieformalnej dokumentacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-17 20:26:36
Jedno wyjaśnienie (i punkt, który mnie zdezorientował):
"remotes / origin / HEAD jest domyślną gałęzią" nie jest naprawdę poprawne.
Remotes / origin / master był domyślną gałęzią w zdalnym repozytorium(ostatnio sprawdzałeś). Głowa nie jest gałęzią, tylko wskazuje na gałąź.
Myśl o głowie jako o swoim obszarze roboczym. Jeśli myślisz o tym w ten sposób, to 'Git checkout branchname' ma sens w odniesieniu do zmiany plików obszaru roboczego na pliki konkretnej gałęzi. Ty" kasa " rozgałęziasz pliki do swojego obszaru roboczego. Głowa do wszystkich praktycznych celów jest tym, co jest widoczne dla Ciebie w obszarze roboczym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-06 15:04:09
- origin - jest to nazwa zwyczajowa i najczęściej wskazywana na remote.
$ git remote add origin https://github.com/git/git.git
--- uruchomisz to polecenie, aby połączyć swój projekt github z origin. Tutaj origin jest zdefiniowane przez użytkownika.
Możesz zmienić nazwę przez $ git remote rename old-name new-name
- master - domyślna nazwa gałęzi w Git to master. Zarówno dla komputera zdalnego, jak i lokalnego.
- origin / master - jest to tylko wskaźnik do referowania gałęzi master w zdalnym repo. Pamiętaj, że mówiłem, że źródło wskazuje na pilota.
$ git fetch origin
- pobiera obiekty i refy ze zdalnego repozytorium na komputer lokalny [origin/master]. Oznacza to, że nie wpłynie to na lokalną gałąź master, chyba że połączysz ją za pomocą $ git merge origin/master
. Pamiętaj, aby sprawdzić poprawną gałąź, do której chcesz się połączyć przed uruchomieniem tego polecenia
Uwaga: pobrana zawartość jest reprezentowana jako zdalna gałąź. Fetch daje Ci możliwość przejrzenia zmian przed ich zintegrowaniem z Twoją kopią projekt. Aby pokazać zmiany między Twoim a zdalnym $git diff master..origin/master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-13 22:36:45
Postaram się aby odpowiedź @ErichBSchulz była prostsza dla początkujących:
- origin / master jest stanem gałęzi master w zdalnym repozytorium
- master jest stanem gałęzi master w lokalnym repozytorium
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-22 11:50:47