如果git中的分支需要重新绑定,如何用bash脚本实际检查?

Jim*_*ell 8 git bash rebase git-rebase git-bash

我正在为我的团队制作一个bash脚本,以强制定期对工作分支进行重新定位.我目前面临的问题是如何确定分支是否落后于主分支和/或是否需要重新分配,而不是盲目地尝试重新分支分支.

这是我到目前为止的简化版本:

#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
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激.谢谢!

Sch*_*eis 25

要告诉您是否需要重新分支您的分支,您需要找出最新提交的内容以及您的两个分支共享的最后一次提交.

要在分支上查找最新提交:

git show-ref --heads -s <branch name>
Run Code Online (Sandbox Code Playgroud)

然后找到分支机构共有的最后一次提交:

git merge-base <branch 1> <branch 2>
Run Code Online (Sandbox Code Playgroud)

现在你需要做的就是找出这两个提交是否是同一个提交.如果是,那么你不需要变基.如果不是,则需要变基.

例:

hash1=$(git show-ref --heads -s master)
hash2=$(git merge-base master foo/bar)
[ "${hash1}" = "${hash2}" ] && echo "OK" || echo "Rebase is required"
Run Code Online (Sandbox Code Playgroud)

尽管如评论中所述,如果您尝试重新绑定已经是最新的分支.Git将优雅地处理这种情况并退出.

  • 你在哪个分支做`show-ref`?应该是大师。基本上这两个命令是检查并查看 master 上的最新提交是否是工作分支的合并基础。工作分支上的提交根本不重要。 (2认同)