如何在使用 push.default 电流推送时自动设置上游?
How to auto set-upstream when pushing with push.default current?
我过去常常根据 git fetch -p
加上一些 git 管道命令¹ 的指示自动删除我的分支,并匹配 [gone]
模式,然后删除匹配的分支。
我使用的一些存储库强制压缩拉取请求,因此永远不会在本地进行合并提交,而且我无法将新提交的内容与本地分支的内容链接起来。
前段时间换成push.default current
,功能确实比push.default upstream
或simple
好。
几天后,我发现我所有的分支都没有被删除;这来自于推送时的事实,上游被“猜测”但从未 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
设置为 current
,git push -u
单独(没有 ... origin my-branch
)将创建远程分支 和 将您的本地分支设置为跟踪该远程分支。
补充说明:%(refname:short)
(在git for-each-ref --format
中)会显示你习惯的分支名称
我过去常常根据 git fetch -p
加上一些 git 管道命令¹ 的指示自动删除我的分支,并匹配 [gone]
模式,然后删除匹配的分支。
我使用的一些存储库强制压缩拉取请求,因此永远不会在本地进行合并提交,而且我无法将新提交的内容与本地分支的内容链接起来。
前段时间换成push.default current
,功能确实比push.default upstream
或simple
好。
几天后,我发现我所有的分支都没有被删除;这来自于推送时的事实,上游被“猜测”但从未 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
设置为 current
,git push -u
单独(没有 ... origin my-branch
)将创建远程分支 和 将您的本地分支设置为跟踪该远程分支。
补充说明:%(refname:short)
(在git for-each-ref --format
中)会显示你习惯的分支名称