首页 > 解决方案 > Git:拉新提交时遵循合并

问题描述

假设我们有这些分支:

我的本地仓库正在关注“new_feature”。

其他人已将“new_feature”合并到“develop”,并删除了服务器上的那个分支(即“new_feature”分支)。正如预期的那样,功能完成后。

我想要一种自动化/脚本化的方式来检测分支是否已合并,到哪个目标分支,并在本地签出该分支(并删除本地“new_feature”分支)。

PS:在这个简化的场景中,可以丢弃分支上的本地更改。

任何人?

标签: gitmerge

解决方案


我找到了部分解决方案。

检测拉动是否有效:

如果 !git pull --all --prune; 然后

该分支已被远程删除,因此不再存在引用。但是我们知道该(本地)分支的最新本地和已知提交是什么。让我们看看这个提交在哪里被合并(感谢@joanis):

ORIGIN=$(git branch --remotes --merged "HEAD" | grep -v HEAD)

提交可以出现两次,我们去掉“-> HEAD”行。我们需要找出名称是什么:

BRANCH="${ORIGIN/origin/}"

BRANCH="${BRANCH// /}"

所以让我们去新的分支:

git checkout "$BRANCH" git pull

这种情况的限制是如果有多个分支已合并。该算法将按照“git 分支”列出的顺序选择其中一个。


推荐阅读