Каковы git-концепции HEAD, master, origin?

197

Поскольку я изучаю git, я постоянно сталкиваюсь с терминами HEAD, master, origin, и я не уверен, в чем различия. Если я правильно понимаю, HEAD всегда равен последней ревизии? И если да, то это последняя версия всего хранилища или конкретной ветки или тега? Это так запутанно. Я прочитал очень много уроков по этому вопросу и таких вещей, как ветвление / слияние, но все еще не могу обдумать это.

user779159
источник

Ответы:

232

Я очень рекомендую книгу «Pro ​​Git» Скотта Чакона . Потратьте время и действительно прочитайте его, одновременно изучая реальное git-репо.

HEAD : текущий коммит вашего репо включен. Большую часть времени HEADуказывает на последний коммит в вашей текущей ветке, но это не обязательно так.HEADна самом деле просто означает «на что сейчас указывает мой репо».

В том случае, если коммит HEADссылается не на вершину какой-либо ветви, это называется «отстраненной головой».

master : имя ветки по умолчанию, которую git создает для вас при первом создании репо. В большинстве случаев «мастер» означает «основной филиал». В большинстве магазинов все стремятся к мастеру, и мастер считается окончательным взглядом на репо. Но для выпусков ветки релиза также являются обычным делом. У вашего локального репо есть собственная мастер-ветка, которая почти всегда следует за мастером удаленного репо.

origin : имя по умолчанию, которое git дает вашему главному удаленному репо. У вашего ящика есть свое собственное репо, и вы, скорее всего, продвигаетесь к какому-либо удаленному репо, к которому вы и все ваши коллеги стремитесь. Это удаленное репо почти всегда называется источником, но это не обязательно.

HEADэто официальное понятие в git. HEADвсегда имеет четко определенный смысл. masterи originявляются общими именами, обычно используемыми в git, но они не должны быть.

Мэтт Грир
источник
Что вы подразумеваете под "HEAD на самом деле просто означает", на что сейчас указывает мой репо "." Если в репозитории есть несколько веток, какая из них является ГОЛОВНОЙ по вашему мнению? если есть 3 ветви (вместе с мастером), и в ветке A была сделана необходимая фиксация, HEAD все еще может быть в фиксации 'master'. Итак, на какую ревизию сейчас указывает репо?
OK999
2
Непонятно, что вы подразумеваете под репо (локальным или удаленным). В общем, ваш ответ использует выражения, не объясняя их раньше.
Я просто сделал клон в параллельном каталоге, чтобы сравнить мой рабочий каталог с подсказкой удаленного репо. Вот как хороши все git ответы.
@ JingHe Ты прочитал всю книгу? Это действительно того стоит? Я имею в виду, что мы говорим о том, что прочитано более 500 страниц, что кажется мне слишком большим ...
Макс
1
Чтобы убедиться, что я понимаю логику, я могу вызвать ветку в удаленном режиме как featureA, и когда я нажимаю на эту ветку, я набираю «git push origin featureA». Я могу вытащить то же самое с пульта, сказав «git pull origin особенность A», внесите изменения. И голова имеет в виду только местный экземпляр. @ OK999 Я полагаю, что HEAD указывает на какую-либо ветку, которую вы проверили в данный момент в местном отделении. Если фиксация была сделана в branchA, но в настоящее время вы находитесь на branchB, HEAD указывает на branchB. Вы должны переместить ГОЛОВКУ в ответвление A, прежде чем делать конкретный коммит.
TLee
43

HEADэто не последняя версия, это текущая версия. Обычно это последняя версия текущей ветки, но это не обязательно.

master это имя, обычно назначаемое основной ветви, но оно может называться как угодно (или основной ветви не может быть).

originэто имя, обычно назначаемое главному пульту. remote - это еще один репозиторий, из которого вы можете извлечь и нажать. Обычно это на каком-то сервере, например на github.

svick
источник
1
Можете ли вы привести пример, когда HEAD является текущей, но не последней? Я никогда не видел этого раньше. Или вы имеете в виду, что он может быть не последним, потому что ваша ветвь находится за удаленной ветвью, которую она отслеживает?
Мэтт Грир,
12
@MattGreer: если вы извлекаете что-то более старое (например, тег git checkout v1.1), ваш HEAD изменится на коммит этого тега. Это может быть не последний коммит.
Грег Хьюгилл
8

Хотя это не дает прямого ответа на вопрос, есть бесплатная книга, которая поможет вам изучить основы, называемые ProGit . Если вы предпочитаете версию из дров, а не коллекцию битов, вы можете приобрести ее у Amazon .

Петр Перак
источник
9
Вопрос не задан для книги! Мне до сих пор неясно, зачем мне нужна книга для git, когда мне не нужна книга для C ++.
13
Вы только думаете, что вам не нужна книга для C ++;)
Петр Перак