Я создал bash script, который выполняет следующие задачи:
- Извлечь изменения из восходящего потока;
- Проверьте, возможно ли быстрое слияние,
- Объединить
origin/master
вmaster
, если # 2 истинно; - Rebase
master
поверхorigin/master
, если # 2 false
Код выглядит следующим образом:
#!/bin/sh
local_branch=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)
remote_branch=$(git rev-parse --abbrev-ref --symbolic-full-name @{u})
remote=$(git config branch.$local_branch.remote)
echo "Fetching from $remote..."
git fetch $remote
if git merge-base --is-ancestor $local_branch $remote_branch; then
echo 'Fast-forward is possible. Merging...'
git merge --ff-only $remote_branch
else
echo 'Fast-forward is not possible. Rebasing...'
git rebase --preserve-merges $remote_branch
fi
Я тестировал его несколько раз и, похоже, работает, но я не очень уверен в части git merge-base
. Я знаю теорию быстрого слияния, и кажется правильным использовать master
и origin/master
в качестве аргументов для merge-base
, но я не эксперт Git.
Итак, я спрашиваю: правильно ли проверять, возможно ли быстрое слияние сразу после выполнения выборки?