Git で別のブランチから変更を選択的にマージまたは選択するにはどうすればよいですか? 質問する

Git で別のブランチから変更を選択的にマージまたは選択するにはどうすればよいですか? 質問する

私は、2 つの並行した(ただし現在は実験的な)開発ブランチを持つ新しいプロジェクトで Git を使用しています。

  • master: 既存のコードベースのインポートと、概ね確信しているいくつかの変更
  • exp1: 実験ブランチ #1
  • exp2: 実験ブランチ #2

exp1これらは 2 つの非常に異なるアーキテクチャ アプローチをexp2表しています。さらに作業を進めなければ、どちらが機能するか (またはどちらかが機能するか) はわかりません。1 つのブランチで作業を進めていくと、他のブランチでも役立つ編集内容が見つかることがあり、その編集内容だけをマージしたい場合があります。

他のすべてを残しながら、ある開発ブランチから別の開発ブランチに選択的な変更をマージする最適な方法は何ですか?

私が検討したアプローチ:

  1. git merge --no-commit次に、ブランチ間で共通にしたくない多数の編集を手動でステージング解除します。

  2. 共通ファイルを一時ディレクトリに手動でコピーし、その後git checkout他のブランチに移動し、さらに一時ディレクトリから作業ツリーに手動でコピーします。

  3. 上記のバリエーションです。exp今のところはブランチを放棄し、実験用に 2 つの追加のローカル リポジトリを使用します。これにより、ファイルの手動コピーがはるかに簡単になります。

これら 3 つのアプローチはどれも面倒でエラーが発生しやすいようです。フィルター パス パラメーターに似た、より選択性の高い、より優れたアプローチがあることを期待していますgit-merge

ベストアンサー1

要約

git checkout source_branch -- path/to/file
# resolve conflicts if any
git commit -am '...'

私も上で述べたのと同じ問題を抱えていました。しかし、これ答えをより明確に説明します。

まとめ:

  • マージしたいブランチからパスをチェックアウトし、

     $ git checkout source_branch -- <paths>...
    
    Hint: It also works without `--` like seen in the linked post.
    
  • または、選択的にハンクをマージする

     $ git checkout -p source_branch -- <paths>...
    

あるいは、リセットを使用してからオプションを追加し-p

    $ git reset <paths>...
    $ git add -p <paths>...
  • 最後にコミット

     $ git commit -m "'Merge' these changes"
    

おすすめ記事