まったく同じファイルを持つ 2 つのブランチがあり (それが .sql ファイルだと思っている場合)、それを対話的にマージしたいと考えています。
競合 (またはコマンド ライン) が発生したときに行うように、差分プログラムを開き、どの行がどこに行くのかを正確に選択したいと考えています。
とにかくこれを行うことはありますか?
まったく同じファイルを持つ 2 つのブランチがあり (それが .sql ファイルだと思っている場合)、それを対話的にマージしたいと考えています。
競合 (またはコマンド ライン) が発生したときに行うように、差分プログラムを開き、どの行がどこに行くのかを正確に選択したいと考えています。
とにかくこれを行うことはありますか?
はい。ただし、ほとんどの場合、手動で行う必要があります。2 つの関連するブランチをマージしていることを Git に伝えますが、それ自体で結果をコミットしようとするべきではありません (追加するように編集:マージが自明であると思われる場合は早送りもしないでください):
git merge --no-commit --no-ff branch-to-merge
次に、2 つのブランチに表示されるファイルを git に要求します。
git show HEAD:filename >filename.HEAD
git show branch-to-merge:filename >filename.branch
そしてそれらの合流基地、
git show `git merge-base HEAD branch-to-merge`:filename >filename.base
必要なツールを使用してそれらをマージします(例)
meld filename.{HEAD,branch,base}
それをステージング ( git add filename
) してから、マージをコミットします ( git commit
)。
最も簡単な方法は、競合git merge <other_branch
をgit mergetool
グラフィカルに解決することです。mergetool の設定方法については、 #10935226を参照してください。
問題は、変更されたファイルが古いファイルと早送りマージされる可能性があることです。次に、もう少し賢くなる必要があります。
Novocrat はもう少し深く掘り下げる優れた方法を提供しますが、git merge --no-commit --no-ff <other_branch>
--no-commit は実際には「マージをコミットしないでください...早送りマージでない限り」を意味するため、多くの場合、最初のコマンドをに変更する必要があります。あなたがやりたいことを正確にやろうとしている多くの人々にとって、それは少し厄介です.
場合によっては、混乱を最小限に抑える方法があまり洗練されていないこともあります。別の作業コピーで別のブランチをチェックアウトし、お気に入りのマージ ツールを使用して、必要なディレクトリで必要なバージョンを取得してから、コミットします。
この要点によると、temp は既存のブランチである可能性があります。
https://gist.github.com/katylava/564416
マスター上:
git checkout -b temp
一時的に:
git merge --no-commit --no-ff refactor
…すべてをステージングするため、次のようになります。
git reset HEAD
次に、必要な部分の追加を開始します。
git add --interactive