Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@hamakou108

Git で特定のコミットの特定のファイルだけ取り出したい

特定のコミットの内容を取り込むなら cherry-pick でできます。
だけどさらに、その中の特定のファイルの差分だけ取り込んで、他は無視したい場合はどうする? という話です。

TL;DR

git checkout -p でできます。

git checkout (-p|--patch) [<tree-ish>] [--] [<paths>...]

使い方

$ git diff HEAD daa154e hoge.txt  # カレントブランチとの差分を確認する
diff --git a/hoge.txt b/hoge.txt
index e42f4ce..2262de0 100644
--- a/hoge.txt
+++ b/hoge.txt
@@ -1,2 +1 @@
 hoge
-fuga

$ git checkout -p daa154e hoge.txt  # 差分をインデックスに反映する
diff --git b/hoge.txt a/hoge.txt
index 2262de0..e42f4ce 100644
--- b/hoge.txt
+++ a/hoge.txt
@@ -1 +1,2 @@
 hoge
+fuga
(1/1) Apply this hunk to index and worktree [y,n,q,a,d,e,?]? y

$ git diff --staged  # インデックスに反映されたことを確認する
diff --git a/hoge.txt b/hoge.txt
index 2262de0..e42f4ce 100644
--- a/hoge.txt
+++ b/hoge.txt
@@ -1 +1,2 @@
 hoge
+fuga

(1/1) Apply this hunk to index and worktree [y,n,q,a,d,e,?]? の部分はインタラクティブになっていて、 y を選ぶと表示されている箇所の差分が取り込まれます。
? で各コマンドの内容を確認できます。

(1/1) Apply this hunk to index and worktree [y,n,q,a,d,e,?]? ?
y - apply this hunk to index and worktree
n - do not apply this hunk to index and worktree
q - quit; do not apply this hunk or any of the remaining ones
a - apply this hunk and all later hunks in the file
d - do not apply this hunk or any of the later hunks in the file
e - manually edit the current hunk
? - print help

コミットハッシュの部分は tree-ish なのでブランチ名やタグ名を指定して取り込むこともできます。

おまけ

Git でこれやりたいけどコマンド分からん...ってときは Git Explorer というサイトが便利です。
今回の git checkout -p は "I want to" から "merge" -> "merge a single file from one branch to another." の順に選択して発見しました。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What is going on with this article?