Pomagając dziś znajomemu z problemem git, musiałem wprowadzić gałąź, która musiała być całkowicie oddzielona od master
gałęzi. Zawartość tej gałęzi naprawdę miała inne pochodzenie niż to, co zostało opracowane na master
gałęzi, ale później zostaną połączone z master
gałę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-tree
powiedział 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-tree
powiedział 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 master
oddział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?