Странно, что у git до сих пор нет такого удобного инструмента «из коробки». Я интенсивно использую его, когда обновляю ветку старой версии (в которой все еще много пользователей программного обеспечения) на только некоторые исправления ошибок из ветки текущей версии. В этом случае часто требуется быстро получить только несколько строк кода из файла в транке, игнорируя множество других изменений (которые не должны входить в старую версию) ... И курс интерактивное трехстороннее слияние необходимо в этом случае, git checkout --patch <branch> <file path>
не может использоваться для этой цели выборочного слияния.
Вы можете сделать это легко:
Просто добавьте эту строку в раздел [alias]
в глобальном .gitconfig
или локальном .git/config
файле:
[alias]
mergetool-file = "!sh -c 'git show $1:$2 > $2.theirs; git show $(git merge-base $1 $(git rev-parse HEAD)):$2 > $2.base; /C/BCompare3/BCompare.exe $2.theirs $2 $2.base $2; rm -f $2.theirs; rm -f $2.base;' -"
Это подразумевает, что вы используете Beyond Compare. Просто измените программное обеспечение на ваш выбор, если это необходимо. Или вы можете изменить его на трехстороннее автоматическое слияние, если вам не нужно интерактивное выборочное слияние:
[alias]
mergetool-file = "!sh -c 'git show $1:$2 > $2.theirs; git show $(git merge-base $1 $(git rev-parse HEAD)):$2 > $2.base; git merge-file $2 $2.base $2.theirs; rm -f $2.theirs; rm -f $2.base;' -"
Тогда используйте вот так:
git mergetool-file <source branch> <file path>
Это даст вам истинный выборочный древовидный путь возможность слияния любого файла в другой ветке.