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