別のブランチからファイルを 1 つだけ取得する方法 質問する

別のブランチからファイルを 1 つだけ取得する方法 質問する

mainというファイルを含むブランチがありますapp.js。ブランチ上でこのファイルを変更しましたexperiment

app.jsから行われた変更のみをブランチに適用したいと思いexperimentますmain

ベストアンサー1

git checkout main                 # first get back to main
git checkout experiment -- app.js # then copy the version of app.js 
                                  # from branch "experiment"

参照Git で 1 つのファイルの作業コピーの変更を元に戻す


2019 年 8 月更新、Git 2.23

新しいgit switchそしてgit restoreコマンドは次のようになります:

git switch main
git restore --source experiment -- app.js

デフォルトでは、作業ツリーのみが復元されます。
インデックスも更新する場合 (つまり、ファイルの内容を復元し、1つのコマンドでインデックスに追加する) は、次の手順を実行します。

git restore --source experiment --staged --worktree -- app.js
# shorter:
git restore -s experiment -SW -- app.js

としてヤクブ・ナレブスキコメントでの言及:

git show experiment:path/to/app.js > path/to/app.js

SOの質問に詳細が記載されている点を除けば、これも機能します。Git の特定のリビジョンから単一のファイルを取得するにはどうすればよいでしょうか?" の場合、リポジトリのルート ディレクトリからのフル パスを使用する必要があります。
したがって、Jakub の例では path/to/app.js が使用されています。

としてフロスティコメントで言及:

app.jsの最新の状態のみが取得されます

しかし、git checkoutまたはについてgit showは、SOの質問に示されているように、実際に任意のリビジョンを参照することができます。git gui でファイルのリビジョンを git チェックアウトする「:」

$ git show $REVISION:$FILENAME
$ git checkout $REVISION -- $FILENAME

$FILENAME がバージョン管理されたファイルのフルパスである場合も同様です。

$REVISION次のように表すことができますgit rev-parse:

experiment@{yesterday}:app.js # app.js as it was yesterday 
experiment^:app.js            # app.js on the first commit parent
experiment@{2}:app.js         # app.js two commits ago

等々。

シュミジョス追加コメント欄:

スタッシュからこれを行うこともできます:

git checkout stash -- app.js

これは、2 つのブランチで作業していてコミットしたくない場合に非常に便利です。

おすすめ記事