Which version of the git file will be finally used: LOCAL, BASE or REMOTE?

前端 未结 8 1473
故里飘歌
故里飘歌 2020-11-28 17:39

When there\'s a collison during git merge, I open a mergetool called Meld. It opens three files LOCAL, BASE and REMOTE. As I\'ve read LOCAL is my local branch,

8条回答
  •  时光说笑
    2020-11-28 18:13

    Meld has a hidden 3-way merge feature activated by passing in the 4th parameter:

    meld $LOCAL $BASE $REMOTE $MERGED
    

    The right and left panes are opened in read-only mode, so you can't accidentally merge the wrong way around. The middle pane shows the result of merge. For the conflicts it shows the base version so that you can see all the important bits: original text in the middle, and conflicting modifications at both sides. Finally, when you press the "Save" button, the $MERGED file is written - exactly as expected by git.

    The ~/.gitconfig file I use contains the following settings:

    [merge]
    tool = mymeld
    conflictstyle = diff3
    [mergetool "mymeld"]
    cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE $MERGED
    

    this opens meld with 3 tabs, 1st and 2nd tab containing the simple diffs I'm trying to merge, and the 3rd tab, open by default, shows the 3-way merge view.

    Now, the reason the feature is hidden is that it's not polished enough yet. It's very useful as it is now, but Kai Willadsen, the meld author, pointed to few wrinkles that need ironing out. For example there's no GUI to start the 3-way merge mode, command line syntax is a bit arcane, and such. If you speak python and have some time on your hands - you know what to do.

    Edit: In newer versions of Meld, the synax has changed slightly. This was in the comments, but it belongs in the answer.

    The meld command now uses the --output option, so the last line from the snippet above should be:

    cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED
    

提交回复
热议问题