たまに「任意のブランチに、他ブランチからファイルをコピーしたいなー」という場面があります。
たとえば、GitHub Pagesで公開するためにgh-pagesブランチにビルド済みのファイルのみ置いておきたい、という場合がそうでしょうか。この場合、mainブランチではビルド前のソースコードやアセット用ファイルなどの他に、npm
やyarn
でビルドしたビルド済みファイルがあると思います(これらのファイルやフォルダが.gitignore
の対象だったら、この限りではない)。gh-pagesブランチには、このビルド済みのファイルだけが必要なので、mainブランチから必要な分だけのファイルをコピーしたいわけです。
ここでは、別ブランチからファイルをコピーするときの手順についてメモしておきます。
ここで想定している操作としては、「任意のブランチに対して、mainブランチからファイルをコピーする」です。つまり、これから紹介する手順だと、mainブランチがコピー元になります。
別ブランチにファイルをコピーするには、git checkout
を利用します。一応、いったんコピー前にファイルのアドレスなどをgit show
を使って確認しておいた方が良いと思います。
git show
コマンドでコピー元のファイルのアドレスを確認する。git checkout
コマンドでファイルを新しいブランチにコピーする。ざっくり手順を書き出すと上記のようになります。このように、git checkout
を使ったファイルのコピーは、今いるブランチがコピー先になるのでこの点は注意が必要です。
git checkout -b new_branch
おなじみの、ブランチを作成するコマンドを実行します。これで新規ブランチが作成できます。
git checkout new_branch
コピー先である、新規ブランチに移動します。
git show
コマンドでコピー元のファイルのアドレスを確認するいったんコピー元のファイルについて、その在り処を確認しておきます。「もう場所もファイル名もバッチリわかってるぜ!」という場合は、この手順を飛ばしてしまってもいいと思います。
git show main:path/to/file1
git show main:path/to/file2
コピー元ブランチ名:ファイルパス
の形式で指定します。
上記のコマンドを実行すると、指定したファイルの内容が表示されます。このとき、参照する対象についてファイルでなくフォルダを指定した場合は、そのフォルダに格納されているファイルの一覧が表示されます。
git checkout
コマンドでファイルを新しいブランチにコピーするいよいよ別ブランチからファイルをコピーしてきます。
git checkout main -- path/to/file1 path/to/file2
git checkout
を利用し、前の手順で確認したファイルパスを指定します。
上記を実行すると、現在のブランチにフォルダ構造ごとファイルがコピーされます。ファイル単体だけでなく、フォルダ構成もコピー対象であることに注意です。上記であれば、path/to/file1
というフォルダ構成で現在のブランチにコピーされます。
もし、現在のブランチではコピー元とは別のフォルダ構成にしたい場合、いったんコピーしたあとでフォルダを新規作成しファイルを移動するなどして、フォルダ構成を変更する必要があります。ここだけは若干面倒かもしれません。
git commit -m "Add some files from main"
現在のブランチでの変更をコミットします。これで今までの操作が当ブランチに反映されました。