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 つのブランチで作業していてコミットしたくない場合に非常に便利です。