2017-10-04 13 views
0

私たちはエンベデッドプロジェクトに取り組んでいます。 現在、私たちはコントローラーAで動作するハードウェアを持っています。 その後、最終製品にコントローラーBで新しいハードウェアが追加されます。 現在、コントローラーAで古いハードウェアを使用してブランチ1にビジネスロジックを実装しています。 同僚はブランチ2のコントローラBのソフトウェアを移植しています。彼らは低レベルのもの、デバイスドライバ、HALなどをすべて適応しています。git:選択したファイルのみをマージする

すぐに我々は、ファイルの小さな部分をマージしたいだけだろう、2

しかしブランチにブランチ1をマージする必要があります。 デバイスドライバをマージしようとするのは無意味です。コントローラBでは、デバイスドライバとHALがまったく異なるものになります。 また、ボード依存の構成ファイルをマージすることも意味がありません。

しかし、ブランチ2で "git merge 1"を実行すると、gitはすべてのファイルをマージしようとするため、多くのマージ競合が発生します。 私はマージしたいファイルのセットを選ぶ方法が必要です。

私の解決方法は、「git merge」機能を使用しないことです。 代わりにブランチ1とブランチ2の2つのローカルリポジトリを作成します。 次に、いくつかのランダムなdifftoolを使用して、いくつかのファイルを手動でマージすることができます。 しかし、このソリューションでgitは私がマージしたことを知らないでしょう。 また、ブランチツリービューは私の "マージ"を反映しません。

私は何をしたいのですか?

+0

2つのブランチをチェックアウトして、ブランチBに必要なファイルをコピーしてそこにあるファイルを上書きしてコミットできないのはなぜですか?確かに、どのファイルを扱っているのかを知る必要があります。 – Lundin

+0

できますが、この「マージ」はgitのビジュアルツリービューには反映されません。 git-point-of-viewから、これはマージではなく通常のコミットです。 – lugge86

+0

問題はありません。枝を閉じて、それがもはや維持されていないと言うだけです。 「リビジョンツリーの視覚的な魅力」は無関係です。 – Lundin

答えて

0

cherry-pickコマンドを使用して、1つのブランチから個々のコミットを取得します。

変更が個々のコミットにない場合は、ここに示す方法を使用して、コミットを個々のコミットに分割します。大まかに言えば、git rebase -iを使って元のコミットを編集した後、git reset HEAD ^を使って選択的に変更を元に戻し、git commitを実行してその履歴を新しいコミットとしてコミットします。

Red Hat Magazineには、git add --patchまたはgit add --interactiveを使用してさまざまな変更を個々のファイル(そのページで「分割」を検索)。

変更を分割することで、必要なものだけチェリーピックすることができます。

関連する問題