我创建了一个执行以下任务的 bash 脚本:
- 从上游获取更改;
- 检查是否可以进行快进 merge ;
- 如果#2 为真,则将
origin/master
merge 到master
中; - 如果#2 为假,则在
origin/master
之上重新设置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
部分不是很有信心。我知道快进 merge 背后的理论,使用 master
和 origin/master
作为 merge-base
的参数似乎是正确的,但我不是 Git 专家。
所以我问:在执行提取后检查是否可以进行快进 merge 的正确方法是正确的吗?
最佳答案
git merge-base --is-ancestor <commit> <commit>
--is-ancestor
检查第一个 <commit>
是第二个的祖先<commit>
, 如果为真则以状态 0 退出,否则以状态 1 退出。错误由非 1 的非零状态表示。
例如
git merge-base --is-ancestor origin/master master
关于git - 检查是否可以使用 git merge-base 执行快进 merge 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504400/