私には2つのブランチAとBがあります。私がやりたいのは、Aの現在の状態を親としてAに新しい(マージ)コミットを作成することです。これは、Bによって記述されたファイルツリーを参照し、Aから何かを破棄します。 Bは1つのコミットに押しつぶされる必要があります。
具体的なリポジトリの状態は、2つの独立したブランチで構成されます。これらのブランチには、共通の祖先(2つの以前は独立したリポジトリからのもの)はありませんが、同じコンテンツを記述しています。今、私はそれらをまとめるための「git」方法を見つけたいと思います。基本的な解決策(gitなし)は、Aをチェックアウトし、Bのコンテンツを作業ツリーにコピーしてaを実行することgit commit
です。これは基本的に、2番目のリポジトリのコンテンツを最初のリポジトリに伝播するために以前に行ったことです。
gitでそれを行うために私は試しました
git checkout A
git merge --squash B
しかし、残念ながら、AとBで異なるすべてのファイルに対してマージの競合が発生しました。これは、私が期待したものとは明らかに異なります。
基本的には
git merge --squash -s theirs
仕事をする必要がありますが、マージ戦略theirs
は存在しません。ドキュメントを読むと、次のようなものを使用する可能性が示されます
git merge -X theirs
これは、マージ戦略のオプションrecursive
です。ただし、これでも競合しないチャンクのマージは行われます。競合するチャンクのみがから直接取得されtheirs
ます。