master
, HEAD
, origin/something
i może jakiś znacznik, dlaczego nie, może wszystko wskazuje na to samo popełnienia, ale są one zdecydowanie nie to samo.
origin
jest zwykle nazwą remote repository.
Możesz zobaczyć swoje piloty zdalne i skonfigurować nowe za pomocą git remote -v
.
Wypróbuj (z -v
) i prawdopodobnie będzie to miało sens.
remote/somebranch
wskazuje na szefa oddziału na zdalnym repozytorium.
origin/master
punktów do głowy master
na origin
.
Czy to samo co master
?
Tak i nie. Jeśli wyciągniesz swój główny oddział, wykonasz jakąś pracę, a w międzyczasie ktoś inny popełni na master
i popchnie do origin
, będą się różnić.
Po wykonaniu git fetch origin
, origin/master
będzie mieć dodatkowe zatwierdzenia (będzie przed).
HEAD
jest po prostu "bieżącym zatwierdzeniem". Pomyśl o tym jako o .
.
Zobacz this question
Ponownie, mógłby być taka sama jak master
, ale jeśli sprawdzeniu inny oddział lub popełnienia lub są w środku rebase, dobrze, że nie.
Więc spróbuj tego na świeżym repozytorium na które nikt inny nie pracuje:
$ git checkout master
$ git log -1 --format="%H" HEAD
123abc
$ git log -1 --format="%H" origin/master
123abc
one są takie same!
$ git diff origin/master
Oczywiście ich zawartość jest taka sama.
$ echo "foo" > foo
$ git add foo
$ git commit -m "Foo the thingy"
$ git log -1 --format="%H" HEAD
321bca
$ git log -1 --format="%H" origin/master
123abc
Ah, zobacz, teraz są inne zobowiązania!
$ git push origin master
$ git log -1 --format="%H" HEAD
321bca
$ git log -1 --format="%H" origin/master
321bca
A teraz nie są! popchnęliśmy nasz ostatni commit i obaj wskazują na to samo.
$ git checkout -b newbranch
$ echo "baz" > baz
$ git add baz
$ git commit -m "Baz the thingy with the stuff"
$ git branch -a
master
* new_branch
origin/master
$ git log -1 --format="%H"
789def
$ git log -1 --format="%H" master
321bca
git log -1 --format="%H" origin/master
321bca
git log -1 --format="%H" origin/new_branch
unknown revision or path not in the working tree.
Oczywiście, że nie. Nie pchnął new_branch
do origin
, to tylko na naszej lokalnej maszynie
git checkout 123abc
Właśnie wyrejestrowany 123abc
, stary szef master
. Teraz nie jest szefem żadnej gałęzi, ale możemy to sprawdzić.
Note: checking out 123abc. You are in 'detached HEAD' state, etc
$ git checkout -b old_master
$ git branch -a
master
* new_branch
origin/master
old_master
Teraz zgadnij, jaki będzie ich numer SHA1?
'origin' puszka wyjaśnione przez '' 'wpis w' gitrevisions (7) '; w pełni rozszerza się na 'refs/remote/origin/HEAD'. "origin/master" rozwija się do 'refs/remote/origin/master', a podobnie' origin/branch' rozwinie się do 'refs/remote/origin/branch' (zakładając, jak powiedziałeś, że istnieje). –
chepner