web-dev-qa-db-ja.com

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

私はgitを使ってマスターブランチに取り組んでいます。このブランチにはapp.jsというファイルがあります。

私はexperimentブランチを持っていて、そこで私はたくさんの変更とたくさんのコミットをしました。さて、私はexperimentからmasterへのapp.jsだけに加えられたすべての変更を持って行きたいです。

それ、どうやったら出来るの?

もう一度マージしたくありません。 app.jsのすべての変更をexperimentブランチからmasterブランチに移したいだけです。

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

も参照してください1つのファイルの変更を元に戻す方法?

として JakubNarębski はコメントに言及する:

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

ただし、SO質問「 Gitの特定のリビジョンから単一のファイルを取得する方法は? 」に詳述されているように、ディレクトリのルートディレクトリからフルパスを使用する必要があります。レポ。
したがって、彼の例ではJakubによって使用されるパス/ to/app.js。

As Frosty はコメントで述べている:

app.jsの最新の状態のみを取得します

しかし、git checkoutまたはgit showについては、SO質問 " git gui "内のファイルのgit checkoutリビジョンに示すように、実際には任意のリビジョンを参照できます。

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

$ FILENAMEはバージョン付きファイルのフルパスです。

$REVISIONgit 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

等々。

schmijos 追加 コメント内

あなたはまた隠し場所からこれを行うことができます:

git checkout stash -- app.js

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

1337
VonC

すべてがはるかに簡単です。そのためにはgit checkoutを使用してください。

you're on masterbranchを取得してapp.js from new-featurebranchを得るとします。

git checkout new-feature path/to/app.js

// note that there is no leading slash in the path!

これにより、目的のファイルの内容が表示されます。new-featureの代わりにsha1の一部を使用することもできます。 branch nameは、その特定のコミットの場合と同じようにファイルを取得します。

295

VonCとchhhの答えを補足する。

git show experiment:path/to/relative/app.js > app.js
# If your current working directory is relative than just use
git show experiment:app.js > app.js

または

git checkout experiment -- app.js
30
AlexLordThorsen
git checkout branch_name file_name

例:

git checkout master App.Java

支店名にピリオドが含まれていると、これは機能しません。

git checkout "fix.june" alive.html
error: pathspec 'fix.june' did not match any file(s) known to git.
17
Sarath

あるいは、他のブランチからすべてのファイルが欲しいならば:

git checkout <branch name> -- .
5
Jester

Github上のファイルを確認してそこから引っ張ります。

これは実用的なアプローチであり、直接OPに答えることはありませんが、便利な方法がいくつかあります。

問題のブランチがGitHub上にある場合は、GitHubが提供する多数のツールのいずれかを使用して目的のブランチとファイルに移動し、[Raw]をクリックしてプレーンテキストを表示し、(オプション)欲しい。

このアプローチが好きなのは、リモートファイルをローカルマシンに引き渡す前に、リモートファイル全体を見ることができるからです。

3
fearless_fool