我创建了一个执行以下任务的bash脚本:
origin/master为master#2是否为真;master之上origin/master,如果#2是假的代码如下:
#!/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
Run Code Online (Sandbox Code Playgroud)
我测试了几次它似乎工作,但我对这部分不是很有信心git merge-base.我知道快速合并背后的理论,它似乎是正确的使用master和origin/master作为参数merge-base,但我不是Git专家.
所以我问:是否正确检查是否可以在执行提取后进行快进合并?
小智 13
git merge-base --is-ancestor <commit> <commit>
Run Code Online (Sandbox Code Playgroud)
--is-ancestor检查第一个<commit>是否是第二个的祖先,<commit>如果为true则退出状态0,否则退出状态1.错误由非零状态发出信号,该状态不为1.
例如
git merge-base --is-ancestor origin/master master
Run Code Online (Sandbox Code Playgroud)
小智 8
您想使用该--ff-only选项。
git merge origin/master --ff-only
如果可以快进,它将自动发生。如果不可能,该命令将失败fatal: Not possible to fast-forward, aborting.,您可以运行 rebase 命令。
如果您实际执行合并,您肯定会知道!使用临时分支,这样您就不会弄乱其他分支中的任何内容。
git fetch
git checkout -b tmp_branch master
git merge origin/master
Run Code Online (Sandbox Code Playgroud)
您的脚本需要在此处评估合并结果,以及是否将 origin/master 合并到 master 中。
当不需要时,只需删除临时分支即可。
git branch -D tmp_branch
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4519 次 |
| 最近记录: |