2022-05-02

git で他のブランチから1つだけファイルをコピーしたい

 Takeaway

  • git で違うブランチから1つだけファイルをコピーしたい
  • (例)コピーしてきたファイルが branch/source で feature/hogehoge にcopyme.txtをコピーしたい場合
  • まずコピー先のbranchに移動する
    • git checkout feature/hogehoge 
  • 方法1.コピーしたいフォルダへ移動しておいて,同じcheckoutコマンド以下のようにする
    • git checkout branch/source copyme.txt
  • 方法2. git restoreを使う(※ Git 2.23以降が必要)
    • git restore --source branch/source copyme.txt
  • 1と2の違いは1はファイルがステージングされる(git addされる),2はされない(別途git addする必要がある)
  • ref. stackoverflow よりHow do I copy a version of a single file from one Git branch to another?
 

git で違うブランチから1つだけファイルをコピーしたい

Takeawayに書いた以上のことはほぼ無いものの、初心者は git checkout はブランチ変更ぐらいしか使わないので少し新鮮味のある使い方かもしれない. 参考元のstackoverflowの記事の答えに色々解説があるとおり,

git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir> 
がフォーマットなので,特定の commit から取ってくることも可能なのである.

なお,2022年05月現在では,方法2の方が一般的であるかもしれない.これは,コピーしてきてすぐaddしたいわけじゃなかったり,まぁ色々理由はありますが, 参考元のstackoverflowの記事の答えを読めば納得いくと思います. ちなみに方法1と同じようにステージングさせるなら,

git restore --source otherbranch --staged --worktree copyme.txt
となります. ただし,この方法は特定の commit から取ってくることはできません.その辺は使い分けですね.

0 件のコメント:

コメントを投稿

複数ファイルから特定の文字列を含むファイルと行数を調べる

 Takeaway 複数ファイルから特定の文字列を含むファイルと行数を調べたくなることがある コマンドで調べるのが楽だった.しかもgrepだけでできる. grep -rni "string" * Windows で ...