92

まったく同じファイルを持つ 2 つのブランチがあり (それが .sql ファイルだと思っている場合)、それを対話的にマージしたいと考えています。

競合 (またはコマンド ライン) が発生したときに行うように、差分プログラムを開き、どの行がどこに行くのかを正確に選択したいと考えています。

とにかくこれを行うことはありますか?

4

6 に答える 6

90

はい。ただし、ほとんどの場合、手動で行う必要があります。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)。

于 2012-06-07T15:51:29.973 に答える
42

最も簡単な方法は、競合git merge <other_branchgit mergetoolグラフィカルに解決することです。mergetool の設定方法については、 #10935226を参照してください。

問題は、変更されたファイルが古いファイルと早送りマージされる可能性があることです。次に、もう少し賢くなる必要があります。

Novocrat はもう少し深く掘り下げる優れた方法を提供しますが、git merge --no-commit --no-ff <other_branch>--no-commit は実際には「マージをコミットしないでください...早送りマージでない限り」を意味するため、多くの場合、最初のコマンドをに変更する必要があります。あなたがやりたいことを正確にやろうとしている多くの人々にとって、それは少し厄介です.

場合によっては、混乱を最小限に抑える方法があまり洗練されていないこともあります。別の作業コピーで別のブランチをチェックアウトし、お気に入りのマージ ツールを使用して、必要なディレクトリで必要なバージョンを取得してから、コミットします。

于 2013-07-19T20:06:54.240 に答える
36

この要点によると、temp は既存のブランチである可能性があります。

https://gist.github.com/katylava/564416


マスター上:

git checkout -b temp

一時的に:

git merge --no-commit --no-ff refactor

…すべてをステージングするため、次のようになります。

git reset HEAD

次に、必要な部分の追加を開始します。

git add --interactive
于 2014-03-13T22:24:33.880 に答える
0

WinMergeDiffMerge、または利用可能な差分/マージ UI ツールを使用して、手動で作業を行うことができます。「git difftool」にフックしたい場合は、オンラインで検索して、これらのツールを git で動作させる方法を見つけることができます。

于 2012-06-07T16:02:15.633 に答える