Vimをマージツールとして使用するときに「両方を取得する」方法はありますか?


11

VimをGitとの3ウェイマージとしても使用しており、ローカルブランチとリモートブランチの両方から変更を加える必要がある場合があります。kdiff3キーを数回押すだけでこれを行うことができますが、Vimでこれを行う方法はありますか?

回答:


6

正確にはあなたが尋ねたものではありませんが、これは役立つかもしれません:Spliceプラグイン:3者間マージ中の競合を解決するためのVimプラグインVimeoの素晴らしいスクリーンキャストがあります。

デフォルトのvimdiffを使用する場合は、関数を作成して、ウィンドウのバッファ番号を取得し、それらを使用して:diffget2回呼び出すことができます。

                            *:diffg* *:diffget*
:[range]diffg[et] [bufspec]
        Modify the current buffer to undo difference with another
        buffer.  If [bufspec] is given, that buffer is used.  If
        [bufspec] refers to the current buffer then nothing happens.
        Otherwise this only works if there is one other buffer in diff

(...)

The [bufspec] argument above can be a buffer number, a pattern for a buffer
name or a part of a buffer name.  Examples:

    :diffget        Use the other buffer which is in diff mode
    :diffget 3      Use buffer 3
    :diffget v2     Use the buffer which matches "v2" and is in
                diff mode (e.g., "file.c.v2")

マッピングを使用して、この関数の呼び出しをで使用したキーに割り当てることができますkdiff3

このvimcastの詳細については、こちらをご覧ください


3

yANKとp、それは、おそらく、少し不便よりもですが、UTは、任意のプラグインや余分な機能なしで作業することができますdgdp

必要なビットを親バッファーからコピーして、マージされたバッファーの正しい場所に貼り付けるだけです。これは、全体ではなく、diffブロックの一部だけが必要な場合にも役立ちます。

場合によっては、Vimで差分強調表示をで更新する必要があり:diffupdateます。


0

1つのコマンドでターゲットブランチとマージブランチの両方からの変更を組み合わせるには:

Git競合マーカーがある行を削除できます。次の2つの方法は、次で始まるすべての行を削除します。

<<<<<<<
=======
>>>>>>>

方法1: コマンドを手動で入力して実行する

:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d

方法2: ユーザー定義コマンドの実装

"Delete all Git conflict markers
"Creates the command :GremoveConflictMarkers
function! RemoveConflictMarkers() range
  echom a:firstline.'-'.a:lastline
  execute a:firstline.','.a:lastline . ' g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d'
endfunction
"-range=% default is whole file
command! -range=% GremoveConflictMarkers <line1>,<line2>call RemoveConflictMarkers()

Vim diffgetdiffputはどちらか一方のブランチのみを選択します。したがって、上記以外の唯一の実際の解決策は、手動で両方のファイルをヤンクして作業コピーに貼り付けることです。


反対票を投じる場合は理由を記入してください。
user3751385

これで全部です-マーカーを削除するだけです。
アーロンマクミリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.