如果 git 中的分支需要变基,如何实用地检查 bash 脚本?
How to pragmatically check with bash script if a branch in git needs to be rebased?
我正在为我的团队编写一个 bash 脚本,以强制对工作分支进行定期变基。我现在面临的问题是,如果一个分支需要变基,如何判断它是否落后于 master and/or,而不是盲目地尝试变基。
这是我目前拥有的简化版本:
#Process each repo in the working directory.
for repo_dir in $(ls -1); do
# if working branch is clean ...
# BEGIN update of local master
git checkout master
git fetch origin
git merge remotes/origin/master
# END update of local master
for sync_branch in $(git branch | cut -c 3-); do
if [ "$sync_branch" != "master" ]; then
# BEGIN rebase working branch
git checkout $sync_branch
git rebase master
# Do NOT push working branch to remote.
# END rebase working branch
fi
done
fi
done
如有任何想法,我们将不胜感激。谢谢!
要判断您是否需要变基您的分支,您需要找出最新的提交是什么以及您的两个分支共享的最后一次提交是什么。
要查找分支上的最新提交:
git show-ref --heads -s <branch name>
然后找到你的分支有共同点的最后一次提交:
git merge-base <branch 1> <branch 2>
现在您需要做的就是找出这两个提交是否是同一个提交。如果是,那么您不需要重新设置基准。如果不是,则需要进行变基。
示例:
hash1=$(git show-ref --heads -s master)
hash2=$(git merge-base master foo/bar)
[ "${hash1}" = "${hash2}" ] && echo "OK" || echo "Rebase is required"
尽管如评论中所述,如果您尝试重新设置已经是最新的分支。 Git 将优雅地处理这种情况并退出。
我正在为我的团队编写一个 bash 脚本,以强制对工作分支进行定期变基。我现在面临的问题是,如果一个分支需要变基,如何判断它是否落后于 master and/or,而不是盲目地尝试变基。
这是我目前拥有的简化版本:
#Process each repo in the working directory.
for repo_dir in $(ls -1); do
# if working branch is clean ...
# BEGIN update of local master
git checkout master
git fetch origin
git merge remotes/origin/master
# END update of local master
for sync_branch in $(git branch | cut -c 3-); do
if [ "$sync_branch" != "master" ]; then
# BEGIN rebase working branch
git checkout $sync_branch
git rebase master
# Do NOT push working branch to remote.
# END rebase working branch
fi
done
fi
done
如有任何想法,我们将不胜感激。谢谢!
要判断您是否需要变基您的分支,您需要找出最新的提交是什么以及您的两个分支共享的最后一次提交是什么。
要查找分支上的最新提交:
git show-ref --heads -s <branch name>
然后找到你的分支有共同点的最后一次提交:
git merge-base <branch 1> <branch 2>
现在您需要做的就是找出这两个提交是否是同一个提交。如果是,那么您不需要重新设置基准。如果不是,则需要进行变基。
示例:
hash1=$(git show-ref --heads -s master)
hash2=$(git merge-base master foo/bar)
[ "${hash1}" = "${hash2}" ] && echo "OK" || echo "Rebase is required"
尽管如评论中所述,如果您尝试重新设置已经是最新的分支。 Git 将优雅地处理这种情况并退出。