Это зависит от того, что вы хотите сделать, когда вы оформляете этот коммит. Если все, что вы делаете, это проверяете его, чтобы вы могли собрать или протестировать эту ревизию, то нет ничего плохого в работе с отсоединенной головкой. Просто не забудьте проверить фактическую ветку, прежде чем делать какие-либо коммиты (например, git checkout master
), чтобы не создавать коммиты, которые не включены ни в одну ветвь.
Однако, если вы хотите сделать больше коммитов, начиная с этого момента, вам следует создать ветку. Если вы делаете коммиты, на которые не ссылается ветвь, они могут легко потеряться и в конечном итоге будут очищены сборщиком мусора git, так как к ним ничего не относится. Вы можете создать новую ветку, запустив:
git checkout -b newbranch ea3d5ed
Чтобы помочь визуализировать, вот несколько диаграмм, демонстрирующих, как работа на отсоединенной головке отличается от работы на ветке.
Давайте начнем с 3 коммитов на master
, A, B и C. master
- текущая ветвь, поэтому HEAD
указывает на master
, что указывает на коммит C.
A B C
*--*--* <-- master <-- HEAD
Теперь, если мы сделаем коммит, git создаст коммит с C в качестве родителя (потому что это текущий коммит, на который указывает HEAD
через master
), и обновит master
, чтобы указать на этот новый коммит. , Все наши коммиты теперь находятся в master
, и HEAD
указывает на новый коммит через master
.
A B C D
*--*--*--* <-- master <-- HEAD
Теперь давайте проверим Б, давая нам отдельный HEAD
.
A B C D
*--*--*--* <-- master
^
\-- HEAD
Здесь все отлично работает; мы можем просматривать все файлы, создавать нашу программу, тестировать ее и т. д. Мы даже можем создавать новые коммиты; но если мы сделаем это, то ветки, на которой мы находимся, нет, поэтому мы не можем указать ни одну ветку на этом новом коммите. Единственное, что указывает на это HEAD
:
A B C D
*--*--*--* <-- master
\
* <-- HEAD
E
Если позже мы решим снова проверить master
, ничего не будет относиться к E.
A B C D
*--*--*--* <-- master <-- HEAD
\
*
E
Поскольку на него ничего не ссылается, его может быть трудно найти, и git считает, что коммиты без ссылок не будут заброшены (они случаются довольно часто, если вы перебазируете, исправляете патчи или выполняете другие забавные манипуляции с историей; обычно они представлять заброшенные патчи, которые вам больше не нужны). Через некоторое время git сочтет его мусором, который будет отброшен при следующем запуске сборки мусора.
Итак, вместо того, чтобы проверять голую ревизию и получать отдельную голову, если вы чувствуете, что собираетесь делать больше коммитов, вы должны использовать git checkout -b branch B
, чтобы создать ветку и проверить ее. Теперь ваши коммиты не будут потеряны, так как они будут включены в ветку, к которой вы можете легко обратиться и позже объединить.
A B C D
*--*--*--* <-- master
^
\-- branch <-- HEAD
Если вы забыли сделать это и создать коммиты из ветки, вам не о чем беспокоиться. Вы можете создать ветку со ссылкой на ревизию заголовка с помощью git checkout -b branch
. Если вы уже переключились обратно на ветку master
и поняли, что забыли случайный коммит, вы можете найти его с помощью git reflog
, который покажет вам историю того, что совершил HEAD
указал на последние несколько дней. Все, что еще находится в журнале, не будет собираться мусором, и обычно ссылки хранятся в журнале не менее 30 дней.