我有这个脚本在GitHub.com上合并之后清理本地git分支。它会运行git checkout master && git pull origin master && git branch --merged
以获取可以立即删除的本地分支列表。
如果我将分支推送到GitHub并使用"Confirm squash and merge"功能。当我运行上述相同的命令(git branch --merged
)时,这些命令将不会显示。
答案 0 :(得分:1)
Merge-squash会从分支添加更改,而不会将其标记为已合并。所以你可以尝试寻找相同的变化。您可以使用git patch-id
命令执行此操作。对于单个分支B,它应该类似于:
branch_id=$(git diff origin/master...B | git patch-id)
git rev-list --max-parents=1 B..origin/master \
| while read hash; do commit_id=$(git show "$hash" | git patch-id); if test "$commit_id" = "$branch_id"; then <do what you planned to do with the branch>; break; fi; done
如果你有很多分支,你可以考虑添加一些缓存,以避免多次为同一次提交计算patch-id。
答案 1 :(得分:0)
实际上,您可以从github API检查pullrequest是否已合并,并认为该分支也已合并。
因此,例如,如果您想知道存储库https://github.com/JetBrains/gitextensions中的哪些分支已合并到https://github.com/gitextensions/gitextensions,您向https://api.github.com/repos/gitextensions/gitextensions/pulls?state=closed发出请求,然后使用此类代码选择合并的分支(python2):
import curl
import json
c = curl.Curl()
content = c.get('https://api.github.com/repos/gitextensions/gitextensions/pulls?state=closed')
d = json.decoder.JSONDecoder()
c_parsed = d.decode(content)
for pr in c_parsed:
if pr[u'head'][u'repo'] is not None and pr[u'head'][u'repo'][u'full_name'] == u"JetBrains/gitextensions":
print pr[u'head'][u'ref']