我创建了一个Bash脚本,执行以下任务:
- 从上游获取更改;
- 检查是否可以进行快进式合并;
- 如果#2为真,则将
origin/master
合并到master
; - 如果#2为假,则将
master
在origin/master
之上进行变基。
代码如下:
#!/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专家。
所以我问:这是检查在执行fetch后是否可能进行快进合并的正确方法吗?