如何在使用 push.default 电流推送时自动设置上游?

How to auto set-upstream when pushing with push.default current?

我过去常常根据 git fetch -p 加上一些 git 管道命令¹ 的指示自动删除我的分支,并匹配 [gone] 模式,然后删除匹配的分支。

我使用的一些存储库强制压缩拉取请求,因此永远不会在本地进行合并提交,而且我无法将新提交的内容与本地分支的内容链接起来。

前段时间换成push.default current,功能确实比push.default upstreamsimple好。

几天后,我发现我所有的分支都没有被删除;这来自于推送时的事实,上游被“猜测”但从未 set.

如果我手动设置分支的上游(通过 --set-upstream-to),那么我可以看到我的 trim 脚本再次运行;但这违背了使用 push.default 设置为 current.

的目的
$ git switch -c my-branch
Switched to a new branch 'my-branch'
$ git push 
Total 0 (delta 0), reused 0 (delta 0)
remote: ...
$ git branch -vv
  main      3b3a404 [origin/main] Merge branch 'test-push' into 'main'
* my-branch 3b3a404 Merge branch 'test-push' into 'main'
$ git push -u origin my-branch 
Branch 'my-branch' set up to track remote branch 'my-branch' from 'origin'.
Everything up-to-date
$ git branch -vv
  main      3b3a404 [origin/main] Merge branch 'test-push' into 'main'
* my-branch 3b3a404 [origin/my-branch] Merge branch 'test-push' into 'main'
$ git push -d origin my-branch # this is done automatically after merging
$ git fetch -p
...
 - [deleted]         (none)     -> origin/my-branch
$ git branch -vv
  main      3b3a404 [origin/main] Merge branch 'test-push' into 'main'
* my-branch 3b3a404 [origin/my-branch: gone] Merge branch 'test-push' into 'main'
                                       ^... this is what helps me automatically trimming merged branches

有没有办法 自动 上游设置到 推送到分支 而无需实际输入?

我实际测试了插一个pre-push hook,但是如果分支不存在,set-upstream就不行;并且 post-push 挂钩不存在。

实际上,我的最终目标是删除合并压扁的分支,但我认为没有更好的候选者检查远程是否消失以验证这一点;因为我没有历史重写的保证

1: git for-each-ref --format '%(upstream:track) %(refname)' refs/heads | awk ' == "[gone]" { sub("refs/heads/", "", ) ; print }'

如果您的 push.default 设置为 currentgit push -u 单独(没有 ... origin my-branch)将创建远程分支 将您的本地分支设置为跟踪该远程分支。


补充说明%(refname:short)(在git for-each-ref --format中)会显示你习惯的分支名称