1. ホーム
  2. git

[解決済み] コミット全体ではなく、1つのファイルの変更のみをチェリーピックする方法

2022-09-03 04:57:18

質問

あるブランチで行われた変更を別のブランチに適用する必要があります。 そのためにチェリーピックを使用することができます。しかし、私の場合、1 つのファイルにのみ関連する変更を適用したいので、コミット全体をチェリーピックする必要はありません。 どうすればいいのでしょうか?

どのように解決するのですか?

何を実現したいかに応じて、さまざまな選択肢があります。

ファイルの中身をターゲットブランチと同じにしたい場合は git checkout <branch> -- <filename> . しかし、これは一つのコミットで起こった変更を「チェリーピック」するのではなく、単にそのファイルの結果としての状態を取得するものです。ですから、あるコミットで一行を追加したが、前のコミットではもっと変更されていて、他の変更を加えずにその行だけを追加したい場合、チェックアウトはあなたが望むものではありません。

それ以外の場合、コミットで導入されたパッチを単一のファイルだけに適用したい場合、複数の選択肢があります。例えば git cherry-pick -n を実行する、つまりコミットせずにコミットを編集する (たとえば、すべてのファイルを git reset -- . を使ってすべてのファイルをリセットし、実際に変更したいファイルだけを git add <filename> ). または、そのファイルの diff を作成し、その後に diff を適用することもできます。

git diff <branch>^..<branch> -- <filename> | git apply