Git ветки просто теги? - PullRequest
       1

Git ветки просто теги?

8 голосов
/ 28 сентября 2011

Я заметил способность git проверять определенный коммит. После этого я начал понимать, как на самом деле работает git.

Но я хочу быть уверен, что это правильно: Когда я создаю ветку, это не что иное, как тег, указывающий на текущий коммит. Когда я проверяю эту ветку, я проверяю коммит, на который указывает этот «тег». Теперь, когда я что-то фиксирую, создается новый коммит. Текущий извлеченный тег ветви теперь обновляется, так что он указывает на новый коммит.

Так ... на самом деле, я мог бы сделать все это вручную, верно? Это просто возможность сделать вещи проще.

Ответы [ 3 ]

7 голосов
/ 28 сентября 2011

Да, это хорошая модель для ветки.Однако остерегайтесь терминологии - в git также есть понятие тегов, но теги не перемещаются - они всегда указывают на один и тот же коммит.


Обновление: добавление немного больше деталей, что может представлять интерес ...

Ваша текущая ветка хранится в файле HEAD, который либо указывает на ветку, и в этом случае содержимое выглядит следующим образом:

ref: refs/heads/master

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

2b45553eec2019594724dcbb4c252a74cbb5f38e

В первом случае ветвь master продвигается при создании новогоcommit, но в последней ситуации (известной как «detached HEAD» по понятным причинам) ни одна ветвь не изменится при создании нового коммита.

4 голосов
/ 28 сентября 2011

Branch - указатель ссылки, он указывает на текущий коммит, как вы говорите.

Но вы не должны использовать эти слова взаимозаменяемо, потому что они означают что-то другое.

3 голосов
/ 28 сентября 2011

Да, для git ветка - это просто ссылка на коммит, который автоматически обновляется при фиксации. Вы могли бы отследить это сами, как вы заметили.

Фактически, git предоставляет все низкоуровневые блоки, на которых строится более высокоуровневая абстракция. Вы можете, если вы хотите использовать такие команды, как git hash-object, git mk-tree и git commit-tree, чтобы вручную делать то, что git add и git commit, если хотите (см. Главу Raw Git в Git Book, чтобы знать, как это сделать в деталях).

Обратите внимание, что в git есть два вида тегов. Облегченные теги - это просто ссылки на коммит (через его хэш), которые не перемещаются автоматически. Также существует понятие теговых объектов , которые являются реальными объектами git, заархивированы как коммит и могут содержать сообщение и подпись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...