如何知道一个分支有没有把主干合并过来?

背景就是我想写一个简单的CI,用户指定分支后,用这个分支的代码进行构建

现在会遇到的一个实际问题是,我在做某个迭代的时候,会有其他一些迭代或者hotfix先于当前需求发布,此时就需要把主干的最新代码合并过来,要不然测试的结果并不可靠。

那要怎么判断当前分支是否合并了最新主干?

思路1


命令行执行  

git log my-branch

git log 

然后对两个结果进行字符串比较,确认是否合并,但是如果 my-branch 先于 主干非常多,这个结果可能会有偏差

思路2

命令行执行

git merge origin/主干

根据执行的结果进行字符串对比,确认是否已经合并,感觉也非常不可靠

大家有更好一点的思路吗

回复
阅读 996
3 个回答
✓ 已被采纳

经过试探,已经找到解决方法了,代码如下

const { exec } = require('child_process');

async function isBranchUpToDate(branch) {
  // Get the latest commit on the master branch and the latest common ancestor between the branch and the master branch
  const [masterCommit, commonAncestor] = await Promise.all([
    exec('git rev-parse origin/master'),
    exec(`git merge-base ${branch} origin/master`)
  ]);

  // Check if the branch is up to date with the master branch
  return commonAncestor.stdout.trim() === masterCommit.stdout.trim();
}

// Check if the "my-branch" branch is up to date with the master branch
(async () => {
  console.log(await isBranchUpToDate('my-branch'));
})();

试了一下,似乎可以达到效果。

先拉一下代码,然后获取一下远程 master 最新的一个 commitID,检查有哪些分支包含了这个 commitID,然后再用 grep 去找当前分支是不是在这个列表里面。

git fetch
git branch --contains $(git rev-parse origin/master) | grep $(git rev-parse --abbrev-ref HEAD)

不过,一般情况下,即使直接 git fetch 后,再执行一下 git merge origin/master,似乎也没什么不妥。

纯 git 命令我不会,因为我用的是 vscode,所以我就分享一下我在 vscode 中是怎么做到的

很简单,vscode 安装一个插件 Git graph

图片.png

然后就能看到了

图片.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏