Имена филиалов - это всего лишь записи, хранящие идентификатор фиксации.
Что вы запрашиваете здесь, это сохранить определенный идентификатор фиксации под именем, а затем сравнить другую ветвь . Идентификатор фиксации в сохраненный идентификатор фиксации. Это именно те ветки и теги do: это имена для идентификаторов фиксации.
Единственное реальное различие между именем ветви и именем тега является то, что имя ветви предназначено для перемещения, и на самом деле перемещается автоматически, когда один «на» эту отрасли и делает фиксации:
o--o <-- branch1
/
...--o--o--o <-- HEAD -> branch2
^
|
\-------- tag: tagX
Здесь HEAD
указывает на branch2
, то есть вы находитесь на ветке branch2
: вы сделали git checkout branch2
недавно.
Теперь, если вы сделаете новый фиксации (давайте отмечать этот с *
вместо o
), график становится:
o--o <-- branch1
/
...--o--o--o--* <-- HEAD -> branch2
^
|
\-------- tag: tagX
Обратите внимание, как метка не перемещается.
Если мы используем имя ветви, а не имя тега, оно все еще не перемещается. Давайте перемотаем до новой фиксации и нарисуем это как:
o--o <-- branch1
/
...--o--o--o <-- branchX, HEAD -> branch2
Теперь мы создаем новую фиксацию. Потому что мы находимся на филиале branch2
и не на branchX
, только branch2
изменений. Так что я нарисую это немного по-другому просто, чтобы соответствовать ветви стрелки:
o--o <-- branch1
/
...--o--o--o <-- branchX
\
* <-- HEAD -> branch2
Обратите внимание, что это точно такой же граф как и тег-I've просто нарисован тега стрелка немного по-другому, что стрелка тега ближе к самой фиксации (поскольку теги никогда не должны меняться, а ветви -, которые должны меняться).
Таким образом, все, что вам нужно сделать здесь, это создать имя (название филиала или имя тега), указывая на конкретные фиксации вы хотите, чтобы помнить:
git branch branchX <commit-ID>
или:
git tag tagX <commit-ID>
Что вы должны использовать, тег или ветвь? Это зависит от того, хотите ли вы его перенести, и о том, хотите ли вы, чтобы другие люди делились им.Теги никогда не должны двигаться, и они довольно глобальны: другие люди, которые клонируют ваш репозиторий, получают теги, ваши теги. Филиалы являются Предполагается, что они перемещаются и не являются такими глобальными: другие люди, которые клонируют ваш репозиторий, получают ваши ветви, но как origin/*
имена, а не как их названия филиалов.
(Если вы не хотите ни одного из них - если вы хотите, чтобы имя не перемещалось, но, например, не было глобальным, вы можете придумать свое собственное пространство имен. Встраиваются ветви и теги, и Git знает, что с ними делать. Если вы придумаете свое собственное пространство имен имен, Git не будет знать, как с ним работать, поэтому вам придется больше работать.)