git - 使用 `git push origin :branch-name` 有条件地删除远程分支 ...但前提是分支存在?
问题描述
我的问题的简短版本:
git push origin :gh-pages
如果 gh-pages 分支不存在,是否可以使用跳过或忽略命令的位置有条件地删除远程分支?
我的问题的长版本:
我正在构建一个样板/入门模板,用于使用 NPM 作为构建系统或工作流来构建基本网页(而不是使用 Grunt 或 Gulp 之类的东西)。该项目使用一个/build
文件夹,我想使用 Github Pages 来提供/build
. 从 /settings 似乎没有一个简单的方法来做到这一点(我只看到 /root,而不是 /build),所以我遇到了这个命令:
git subtree push --prefix build origin gh-pages
它创建了一个gh-pages
分支并将我的更改从我的主分支的文件夹推/build
送到新创建的gh-pages
分支。出色的!
不幸的是,我不能简单地gh-pages
用更改来更新我的分支(我也不想这样做)。我也无法进行更改master
,然后将它们合并到gh-pages
. 我收到很多错误消息,分支不相关、不同步或其他。
相反,我需要进行更改,master
然后git subtree push --prefix build origin gh-pages
再次使用该命令来推送这些更改。但是我遇到了另一个错误,它不想将新更改推送到现有gh-pages
分支中。
好的......所以为了解决这个问题,我添加git push origin :gh-pages
到我的命令中。所以现在我的 package.json 中的“部署”命令看起来像这样:
"scripts": {
...
"deploy": "git push origin :gh-pages && git subtree push --prefix build origin gh-pages",
...
},
这很好用。我只需输入npm run deploy
我的终端并git push origin :gh-pages
删除现有gh-pages
分支并使用我的更改git subtree push --prefix build origin gh-pages
创建一个新分支。gh-pages
出色的!
但是......我似乎无法弄清楚的最后一个问题是这个。如果是第一次运行 deploy 命令,则 gh-pages 分支将不存在,并且我的部署脚本将失败。
那么有没有办法有条件地运行该git push origin :gh-pages
部分?像if origin gh-pages exists ... git push origin :gh-pages
什么?
顺便说一句,以这种方式删除分支(使用前导冒号)对我来说是全新的。并且git-push 手册页没有很好地解释它。要了解git push origin :gh-pages
删除gh-pages
分支的结果,请查看此链接。
如果它可能有帮助,这里是repo。package.json 文件是部署脚本所在的位置。
解决方案
如果失败,您可以简单地调用 push-to-delete 并继续。这是粗略的——当且仅当它由于分支不存在而失败时才继续更好——但可以使用。即使命令失败也要继续,请使用git push origin :gh-pages; git subtree push --prefix build origin gh-pages
.
我不会推荐这种方法(无论有没有更聪明的方法来检测“理想的失败”)。您在自己的评论中链接的同一个评论线程中还有另一个解决方案,其中提到了这种方法:
git push origin `git subtree split --prefix build_folder master`:gh-pages --force
这有点短和简单。请注意,这使用build_folder
而不是build
; 如果我们让它匹配,并使用+
语法来实现强制推送和$(...)
我发现比反引号语法更好的语法,我们得到:
git push origin +$(git subtree split --prefix build master):gh-pages
如果git subtree split
自身有可能失败,请使用:
hash=$(git subtree split --prefix build master) && git push origin +$hash:gh-pages
如果您想要一个名为 的本地分支gh-pages
,请使用:
hash=$(git subtree split --prefix build master) && git branch -f gh_pages $hash && git push -f origin gh-pages
例如。
推荐阅读
- angular - Angular HttpClient.get() 不返回完整的响应标头
- rspec - Rspec 测试语言环境是否具有相同的键
- reactjs - 如何将自定义样式添加到 npm 模块 powerBi-report-component
- c# - ASP.NET Core - 在单例中使用配置
- c++ - 如何在地图中返回null?
- r - R Markdown 可以显示在函数中创建的 ggplot 图吗?
- javascript - ReferenceError:找不到变量:DOMParser
- php - Codeigniter 4 中的分页 URI
- vue.js - 我可以通过 NPM 使用 Vuetify 而无需在旧项目中接触 WebPack 吗?
- python - Scipy 未能最小化成本函数