2

我曾经使用加上一些 git 管道命令¹的指示自动删除我的分支git fetch -p,并匹配一个[gone]模式然后删除匹配的分支。

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

前段时间我切换到push.default current了,功能确实比push.default upstreamor好simple

几天后,我注意到我所有的分支都没有被删除;这来自于推送时的事实,上游是“猜测的”但从未设置过。

如果我手动设置分支的上游(通过--set-upstream-to),那么我可以看到我的修剪脚本再次工作;但这违背了使用 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就不能工作;并且不存在后推挂钩。

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

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

4

1 回答 1

2

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


附加说明:(%(refname:short)git for-each-ref --format)将显示您习惯的分支名称

于 2021-12-09T22:01:36.737 回答