Допомагаючи товаришеві з проблемою зі шлунком сьогодні, я повинен був представити гілку, яка мала бути повністю відокремленою від 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, м'яко кажучи. Чи є простіший спосіб створення нової гілки, яка абсолютно не пов'язана з усім, що відбулося в сховищі досі?