mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
![Elijah Newren](/assets/img/avatar_default.png)
Diff best viewed with --color-diff. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
195 lines
6.8 KiB
Plaintext
195 lines
6.8 KiB
Plaintext
Description
|
|
^^^^^^^^^^^
|
|
|
|
When specifying `--tool=vimdiff` in `git mergetool` Git will open Vim with a 4
|
|
windows layout distributed in the following way:
|
|
....
|
|
------------------------------------------
|
|
| | | |
|
|
| LOCAL | BASE | REMOTE |
|
|
| | | |
|
|
------------------------------------------
|
|
| |
|
|
| MERGED |
|
|
| |
|
|
------------------------------------------
|
|
....
|
|
`LOCAL`, `BASE` and `REMOTE` are read-only buffers showing the contents of the
|
|
conflicting file in specific commits ("commit you are merging into", "common
|
|
ancestor commit" and "commit you are merging from" respectively)
|
|
|
|
`MERGED` is a writable buffer where you have to resolve the conflicts (using the
|
|
other read-only buffers as a reference). Once you are done, save and exit Vim as
|
|
usual (`:wq`) or, if you want to abort, exit using `:cq`.
|
|
|
|
Layout configuration
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
You can change the windows layout used by Vim by setting configuration variable
|
|
`mergetool.vimdiff.layout` which accepts a string where the following separators
|
|
have special meaning:
|
|
|
|
- `+` is used to "open a new tab"
|
|
- `,` is used to "open a new vertical split"
|
|
- `/` is used to "open a new horizontal split"
|
|
- `@` is used to indicate the file containing the final version after
|
|
solving the conflicts. If not present, `MERGED` will be used by default.
|
|
|
|
The precedence of the operators is as follows (you can use parentheses to change
|
|
it):
|
|
|
|
`@` > `+` > `/` > `,`
|
|
|
|
Let's see some examples to understand how it works:
|
|
|
|
* `layout = "(LOCAL,BASE,REMOTE)/MERGED"`
|
|
+
|
|
--
|
|
This is exactly the same as the default layout we have already seen.
|
|
|
|
Note that `/` has precedence over `,` and thus the parenthesis are not
|
|
needed in this case. The next layout definition is equivalent:
|
|
|
|
layout = "LOCAL,BASE,REMOTE / MERGED"
|
|
--
|
|
* `layout = "LOCAL,MERGED,REMOTE"`
|
|
+
|
|
--
|
|
If, for some reason, we are not interested in the `BASE` buffer.
|
|
....
|
|
------------------------------------------
|
|
| | | |
|
|
| | | |
|
|
| LOCAL | MERGED | REMOTE |
|
|
| | | |
|
|
| | | |
|
|
------------------------------------------
|
|
....
|
|
--
|
|
* `layout = "MERGED"`
|
|
+
|
|
--
|
|
Only the `MERGED` buffer will be shown. Note, however, that all the other
|
|
ones are still loaded in vim, and you can access them with the "buffers"
|
|
command.
|
|
....
|
|
------------------------------------------
|
|
| |
|
|
| |
|
|
| MERGED |
|
|
| |
|
|
| |
|
|
------------------------------------------
|
|
....
|
|
--
|
|
* `layout = "@LOCAL,REMOTE"`
|
|
+
|
|
--
|
|
When `MERGED` is not present in the layout, you must "mark" one of the
|
|
buffers with an asterisk. That will become the buffer you need to edit and
|
|
save after resolving the conflicts.
|
|
....
|
|
------------------------------------------
|
|
| | |
|
|
| | |
|
|
| | |
|
|
| LOCAL | REMOTE |
|
|
| | |
|
|
| | |
|
|
| | |
|
|
------------------------------------------
|
|
....
|
|
--
|
|
* `layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"`
|
|
+
|
|
--
|
|
Three tabs will open: the first one is a copy of the default layout, while
|
|
the other two only show the differences between (`BASE` and `LOCAL`) and
|
|
(`BASE` and `REMOTE`) respectively.
|
|
....
|
|
------------------------------------------
|
|
| <TAB #1> | TAB #2 | TAB #3 | |
|
|
------------------------------------------
|
|
| | | |
|
|
| LOCAL | BASE | REMOTE |
|
|
| | | |
|
|
------------------------------------------
|
|
| |
|
|
| MERGED |
|
|
| |
|
|
------------------------------------------
|
|
....
|
|
....
|
|
------------------------------------------
|
|
| TAB #1 | <TAB #2> | TAB #3 | |
|
|
------------------------------------------
|
|
| | |
|
|
| | |
|
|
| | |
|
|
| BASE | LOCAL |
|
|
| | |
|
|
| | |
|
|
| | |
|
|
------------------------------------------
|
|
....
|
|
....
|
|
------------------------------------------
|
|
| TAB #1 | TAB #2 | <TAB #3> | |
|
|
------------------------------------------
|
|
| | |
|
|
| | |
|
|
| | |
|
|
| BASE | REMOTE |
|
|
| | |
|
|
| | |
|
|
| | |
|
|
------------------------------------------
|
|
....
|
|
--
|
|
* `layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL/BASE/REMOTE),MERGED"`
|
|
+
|
|
--
|
|
Same as the previous example, but adds a fourth tab with the same
|
|
information as the first tab, with a different layout.
|
|
....
|
|
---------------------------------------------
|
|
| TAB #1 | TAB #2 | TAB #3 | <TAB #4> |
|
|
---------------------------------------------
|
|
| LOCAL | |
|
|
|---------------------| |
|
|
| BASE | MERGED |
|
|
|---------------------| |
|
|
| REMOTE | |
|
|
---------------------------------------------
|
|
....
|
|
Note how in the third tab definition we need to use parentheses to make `,`
|
|
have precedence over `/`.
|
|
--
|
|
|
|
Variants
|
|
^^^^^^^^
|
|
|
|
Instead of `--tool=vimdiff`, you can also use one of these other variants:
|
|
|
|
* `--tool=gvimdiff`, to open gVim instead of Vim.
|
|
|
|
* `--tool=nvimdiff`, to open Neovim instead of Vim.
|
|
|
|
When using these variants, in order to specify a custom layout you will have to
|
|
set configuration variables `mergetool.gvimdiff.layout` and
|
|
`mergetool.nvimdiff.layout` instead of `mergetool.vimdiff.layout`
|
|
|
|
In addition, for backwards compatibility with previous Git versions, you can
|
|
also append `1`, `2` or `3` to either `vimdiff` or any of the variants (ex:
|
|
`vimdiff3`, `nvimdiff1`, etc...) to use a predefined layout.
|
|
In other words, using `--tool=[g,n,]vimdiffx` is the same as using
|
|
`--tool=[g,n,]vimdiff` and setting configuration variable
|
|
`mergetool.[g,n,]vimdiff.layout` to...
|
|
|
|
* `x=1`: `"@LOCAL, REMOTE"`
|
|
* `x=2`: `"LOCAL, MERGED, REMOTE"`
|
|
* `x=3`: `"MERGED"`
|
|
|
|
Example: using `--tool=gvimdiff2` will open `gvim` with three columns (LOCAL,
|
|
MERGED and REMOTE).
|