我曾经用git fetch -p
加一些git管道命令的指示自动删除我的分支,并匹配[gone]
模式,然后删除匹配的分支。
与我合作的一些存储库强制压缩拉请求,因此合并的提交永远不会在本地进行,而且我无法链接新提交的内容和本地分支的内容。
前几次我切换到push.default current
,它的特性确实比push.default upstream
或simple
更好。
几天后,我注意到我所有的分支都没有被删除;这源于当推动时;猜测";但从不设置。
如果我手动设置分支的上游(通过--set upstream到(,那么我可以看到我的修剪脚本再次工作;但这违背了使用push.default设置为电流的目的。
$ 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
有没有一种方法可以让自动将的上游设置推送到分支,而无需实际键入?
我实际上测试了插入一个预推钩子,但如果分支不存在,则设置上游无法工作;推后挂钩不存在
事实上,我的最终目标是删除合并的压缩分支,但我看不到比检查远程是否已消失更好的候选者来验证这一点;因为我没有历史重写的保证
1:git for-each-ref --format '%(upstream:track) %(refname)' refs/heads | awk ' $1 == "[gone]" { sub("refs/heads/", "", $2) ; print $2 }'
如果您的push.default
设置为current
,则仅git push -u
(不包括... origin my-branch
(将创建远程分支并设置本地分支以跟踪该远程分支。
附加说明:%(refname:short)
(在git for-each-ref --format
中(将显示您用于的分支名称