Помогая другу с проблемой git сегодня, я должен был представить ветку, которая должна быть полностью отделена от master
ветви. Содержимое этой ветки действительно имеет происхождение, отличное от того, что было разработано в master
ветке, но они будут объединены в master
ветку позже.
Я вспомнил, читая Git Джона Уигли снизу вверх, как ветви по сути являются меткой для коммита, который следует определенному соглашению, и как коммит привязан к дереву файлов и, необязательно, к родительским коммитам. Мы пошли, чтобы создать коммит без родительского контроля в существующем репозитории с использованием git-системы:
Таким образом, мы избавились от всех файлов в индексе ...
$ git rm -rf .
... извлек каталоги и файлы из архива, добавил их в индекс ...
$ git add .
... и создал объект дерева ...
$ git write-tree
( git-write-tree
рассказал нам sha1sum созданного объекта дерева.)
Затем мы зафиксировали дерево, не указывая родительские коммиты ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
рассказал нам sha1sum созданного объекта коммита.)
... и создал новую ветку, которая указывает на наш недавно созданный коммит.
$ git update-ref refs/heads/other-branch $COMMIT
Наконец, мы вернулись в master
филиал, чтобы продолжить там работу.
$ git checkout -f master
Кажется, это сработало, как и планировалось. Но это явно не та процедура, которую я бы порекомендовал кому-то, кто только начинает пользоваться git, мягко говоря. Есть ли более простой способ создания новой ветки, которая совершенно не связана со всем, что происходило в хранилище до сих пор?