1. ホーム
  2. git

[解決済み] 別のブランチから1つのファイルだけを取得する方法は?

2022-03-07 10:28:10

質問

私はGitを使って master ブランチを作成しました。このブランチには app.js .

私の場合は experiment ブランチで、たくさんの変更と大量のコミットを行いました。今、私はすべての変更を app.js から experiment から master の分岐になります。

どうすればいいのでしょうか?

もう一度言いますが、私はマージを望んでいるわけではありません。私はただ、すべての変更を app.js から experiment に分岐します。 master ブランチを作成します。

解決方法は?

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