[英]Conditionally delete a remote branch using `git push origin :branch-name` … but only if branch exists?
[英]push to a git branch only if the remote branch already exists
我有一个自动化系统,它有条件地提交并推送到请求请求的分支
工作流程如下所示:
问题在于步骤 1 和步骤 4 之间存在竞争,用户删除了他们的分支。
在这种情况下,第 4 步将创建一个分支
我想做的只是推送到分支(如果存在)。 在推送之前检查分支是否存在是一个非解决方案,因为它不能在原子步骤中完成(它减少了竞争条件但不会消除它)
如果有帮助,推送总是预计会快进,目前正在通过git push --quiet remotename HEAD
是否有git push
选项可以防止在这种情况下创建分支?
--force-with-lease
选项允许您执行条件推送
管道本质上变成:
orig_commit=$(git rev-parse HEAD)
# perform side-effects + commits ...
git push remotename HEAD "--force-with-lease=branchname:${orig_commit}"
当远程分支被删除时,它会产生一条错误消息并退出非零:
$ git push origin HEAD --force-with-lease=branchname:21bd2ef3e67adf7b8a5fc56a7e26a2a25589f346
To github.com:asottile/astpretty
! [rejected] HEAD -> branchname (stale info)
error: failed to push some refs to 'git@github.com:asottile/astpretty'
当远程分支存在于上一个版本时:
$ git push origin HEAD --force-with-lease=branchname:21bd2ef3e67adf7b8a5fc56a7e26a2a25589f346
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 183 bytes | 183.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To github.com:asottile/astpretty
21bd2ef..77bcec3 HEAD -> branchname
是否有
git push
选项可以防止在这种情况下创建分支?
是的, git push remotename:
特殊的 refspec:指示 Git 推送“匹配”分支:对于本地端存在的每个分支,如果远程端已经存在同名分支,则更新远程端。
(来自: git push --help
/ https://git-scm.com/docs/git-push )
我读到您正在寻找原子推送,也许git push
--atomic
选项也是您的兴趣所在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.