今日はgitの問題を抱えている友人を助けている間に、master
ブランチから完全に分離する必要があるブランチを紹介する必要がありました。このブランチの内容は、ブランチで開発されたものとは起源が実際には異なりましたが、後でブランチにmaster
マージされる予定master
です。
John WiegleyのGitを下から上から読んだとき、ブランチが基本的に特定の規則に従うコミットのラベルであり、コミットがファイルのツリーと、オプションで親コミットにどのように関連付けられているかを思い出しました。gitのplumbを使用して、既存のリポジトリーに親なしのコミットを作成しました。
したがって、インデックス内のすべてのファイルを削除しました...
$ git rm -rf .
... tarballからディレクトリとファイルを抽出し、それらをインデックスに追加しました...
$ 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を使い始めたばかりの人に穏やかに言えば、私がお勧めする種類の手順ではありません。これまでにリポジトリで発生したすべてのこととはまったく無関係の新しいブランチを作成する簡単な方法はありますか?