頑張らないために頑張る

ゆるく頑張ります

他ブランチからファイルをコピーする

Posted at — Jan 10, 2024

概要

たまに「任意のブランチに、他ブランチからファイルをコピーしたいなー」という場面があります。

たとえば、GitHub Pagesで公開するためにgh-pagesブランチにビルド済みのファイルのみ置いておきたい、という場合がそうでしょうか。この場合、mainブランチではビルド前のソースコードやアセット用ファイルなどの他に、npmyarnでビルドしたビルド済みファイルがあると思います(これらのファイルやフォルダが.gitignoreの対象だったら、この限りではない)。gh-pagesブランチには、このビルド済みのファイルだけが必要なので、mainブランチから必要な分だけのファイルをコピーしたいわけです。

ここでは、別ブランチからファイルをコピーするときの手順についてメモしておきます。

コピー手順

ここで想定している操作としては、「任意のブランチに対して、mainブランチからファイルをコピーする」です。つまり、これから紹介する手順だと、mainブランチがコピー元になります。

別ブランチにファイルをコピーするには、git checkoutを利用します。一応、いったんコピー前にファイルのアドレスなどをgit showを使って確認しておいた方が良いと思います。

  1. 任意のブランチを新規作成する。
  2. 作成したブランチに切り替える。
  3. git showコマンドでコピー元のファイルのアドレスを確認する。
  4. git checkoutコマンドでファイルを新しいブランチにコピーする。
  5. 変更をコミットする。

ざっくり手順を書き出すと上記のようになります。このように、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"

現在のブランチでの変更をコミットします。これで今までの操作が当ブランチに反映されました。

参考

  1. git show
  2. git checkout
  3. Git で特定のブランチからファイルをコピーする
comments powered by Disqus