Gitでファイルを1つだけプルすることは可能ですか?


177

いくつかの壊れたテストがあるGitブランチで作業しています。すでに修正されている別のブランチからこれらのテストをプルします(変更を上書きするだけでなく、マージします)。

私はできることを知っています

git pull origin that_other_branch

しかし、これは他の多くのファイルをマージしようとするため、まだ準備ができていません。

その別のブランチから指定されたファイルのみをプルしてマージすることは可能ですか?

この質問に対するすべての回答は、ブランチを変更せずにローカルで変更されたファイルをリポジトリバージョンに戻す方法であるため、これは1つのファイルに対するGitプルリクエストの複製ではありません。


7
このページのどのエントリも質問に対する答えを提供していないと思います。問題は、すべてのファイルをプルしてローカルで1つだけチェックアウトするのではなく、リモートサーバーから1つのファイルだけをプルすることです。したがって、質問をやり直すか、選択した回答を質問の解決策としてマークしないでください。
mljrg

回答:


153

次のようにして、1つのファイルのみをフェッチしてチェックアウトできます。

git fetch
git checkout -m <revision> <yourfilepath>
git add <yourfilepath>
git commit

git checkoutコマンドに関して: <revision> -ブランチ名、つまりorigin/master <yourfilepath>リポジトリ名が含まれていません(copy pathGitHubのファイルページのボタンをクリックすると表示される)。つまり、README.md


23
-mスイッチで必要なハッシュコードは、git branch -vで出力できます。驚くばかり!
Audrius Meskauskas 2013

2
優れた。これは私に複数の機会で役立ちました。明確にするために、-mフラグは、単一ファイルをプルしたいコミットのハッシュに満足しているようです。
rd108 2013年

1
これも私にとってはうまくいきました。しかし、私は自分のリモートブランチでgit logを実行して、復帰を見つけました。たとえば、$ git log remotes / origin / master
Dan

6
他のファイルをプルせずに特定のファイルをプルすることは可能ですか?
フィールグッドとプログラミング

3
@aleroot <revision>は何を表していますか?
和漢短歌

240

これが私がこれを研究するときに思いついた少し簡単な方法です:

git fetch {remote}
git checkout FETCH_HEAD -- {file}

4
致命的:無効な参照:FETCH_HEAD
Antony D'Andrea

4
この回答には、実用的な例が欠けている可能性があります。次にコミットする必要があるかどうかは不明です。
Dr_Zaszuś

@Chrisすでにブランチにいる場合、{リモート}が必要ですか?はいの場合、なぜですか?
Cloud Cho

2
プルとは異なり、マージを試みます。そのため、プルを使用します。
JosephK

22
git checkout master -- myplugin.js

マスター=ブランチ名

myplugin.js =ファイル名


元に戻す方法はありますか?
liyuan

1
前に 'git pull'することを忘れないでください;)
matson kepson

16

@Mawardyの答えは私にとってはうまくいきましたが、私の変更はリモートで行われたので、原点を指定する必要がありました

git checkout origin/master -- {filename}

2

はい、ここにプロセスがあります:

# Navigate to a directory and initiate a local repository
git init        

# Add remote repository to be tracked for changes:   
git remote add origin https://github.com/username/repository_name.git

# Track all changes made on above remote repository
# This will show files on remote repository not available on local repository
git fetch

# Add file present in staging area for checkout
git check origin/master -m /path/to/file
# NOTE: /path/to/file is a relative path from repository_name
git add /path/to/file

# Verify track of file(s) being committed to local repository
git status

# Commit to local repository
git commit -m "commit message"

# You may perform a final check of the staging area again with git status
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.