Pomagając dziś znajomemu z problemem git, musiałem wprowadzić gałąź, która musiała być całkowicie oddzielona od mastergałęzi. Zawartość tej gałęzi naprawdę miała inne pochodzenie niż to, co zostało opracowane na mastergałęzi, ale później zostaną połączone z mastergałęzią.
Przypomniałem sobie, jak czytałem Git Johna Wiegleya od podstaw, w jaki sposób gałęzie są w zasadzie etykietą zatwierdzenia zgodnego z pewną konwencją oraz tego, jak zatwierdzenie jest powiązane z drzewem plików i, opcjonalnie, zatwierdzeniem rodzica. Poszliśmy stworzyć bez-rodzicielskie zatwierdzenie do istniejącego repozytorium przy użyciu instalacji hydraulicznej git:
Więc pozbyliśmy się wszystkich plików w indeksie ...
$ git rm -rf .
... wyodrębniłem katalogi i pliki z tarballa, dodałem je do indeksu ...
$ git add .
... i utworzył obiekt drzewa ...
$ git write-tree
( git-write-treepowiedział nam sha1sum utworzonego obiektu drzewa).
Następnie popełniliśmy drzewo, nie określając zobowiązań rodziców ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-treepowiedział nam sha1sum utworzonego obiektu zatwierdzenia).
... i utworzył nowy oddział, który wskazuje na nasze nowo utworzone zatwierdzenie.
$ git update-ref refs/heads/other-branch $COMMIT
W końcu wróciliśmy do masteroddziału, aby kontynuować tam pracę.
$ git checkout -f master
Wydaje się, że zadziałało to zgodnie z planem. Ale najwyraźniej nie jest to procedura, którą poleciłbym komuś, kto dopiero zaczyna używać git, delikatnie mówiąc. Czy istnieje łatwiejszy sposób na utworzenie nowej gałęzi, która jest całkowicie niezwiązana ze wszystkim, co do tej pory wydarzyło się w repozytorium?