查看我的公司Inigo,了解最全面的API平台。
轻松管理GitHub上的堆叠式拉取请求。
git spr
是一个客户端工具,通过使用GitHub的拉取请求和分支,实现了简单流畅的堆叠式差异工作流程。git spr
为您管理拉取请求堆栈,让您无需操心。
使用git spr
,每个提交都会成为一个拉取请求,每个分支都成为一堆拉取请求的堆栈。这允许在单个分支上堆叠多个提交,避免了为每个新的更改或功能启动新分支的开销。小的更改和拉取请 求变得简单快速。您不必担心堆叠在一起的分支以及管理复杂的拉取请求堆栈。最终结果是更加流畅、更快速的软件开发周期。
brew tap ejoffe/homebrew-tap brew install ejoffe/tap/spr
echo "deb [trusted=yes] https://apt.fury.io/inigolabs/ /" | sudo tee /etc/apt/sources.list.d/inigolabs.list sudo apt update sudo apt install spr
从发布页面下载预编译的二进制文件,并复制到您的bin路径。
安装goreleaser并运行make。二进制文件可以在dist目录中找到。
make bin
像往常一样将您的更改提交到分支。请注意,每个提交最终都会成为一个拉取请求。
> touch feature_1 > git add feature_1 > git commit -m "Feature 1" > touch feature_2 > git add feature_2 > git commit -m "Feature 2" > touch feature_3 > git add feature_3 > git commit -m "Feature 3"
提交消息的主题将成为拉取请求的标题,消息的正文将成为拉取请求的正文。
如果您有一个正在进行的更改需要提交,但还不想创建拉取请求,请以全大写的WIP开始提交消息。spr脚本不会为任何以WIP开头的提交创建拉取请求,当您准备好创建拉取请求时,请删除WIP。
您无需为 每个更改创建新分支,也不必调用git push将代码推送到GitHub。相反,只需调用git spr update
即可。
运行git spr update
将您的整个提交堆栈同步到GitHub,并为堆栈中的每个新提交创建拉取请求。如果提交被修改,拉取请求将自动更新。该命令输出您的开放拉取请求列表及其状态。git spr update
将您的提交推送到GitHub并为您创建拉取请求,因此您无需手动调用git push或在UI中手动打开拉取请求。
> git spr update [⌛❌✅❌] 60: Feature 3 [✅✅✅✅] 59: Feature 2 [✅✅✅✅] 58: Feature 1
要仅更新部分堆栈,请使用--count
标志指定要更新的堆栈中的拉取请求数量。拉取请求将从堆栈底部向上更新。
当您需要更新提交时,无论是修复测试、根据审查意见更新代码,还是仅仅因为想要更改,您都应该修改提交。
使用git amend
可以轻松修改堆栈中任何位置的更改。暂存您想要修改的文件,然后不要调用git commit,而是使用git amend
并在提示时选择您想要修改的提交。
> touch feature_2 > git add feature_2 > git amend 3 : 5cba235d : Feature 3 2 : 4dc2c5b2 : Feature 2 1 : 9d1b8193 : Feature 1 Commit to amend [1-3]: 2
每个拉取请求都有四个合并状态位,表示请求是否可以合并。要合并请求,所有必需的状态位都需要显示**✔**。每个状态位的含义如下:
拉取请求批准和检查要求可以在配置文件中禁用,详情请参阅下面的配置部分。
使用git spr status
查看您的拉取请求堆栈状态。在以下情况下,三个拉取请求都是绿色的,可以合并,一个拉取请求正在等待审查批准。
> git spr status [✅❌✅✅] 61: Feature 4 [✅✅✅✅] 60: Feature 3 [✅✅✅✅] 59: Feature 2 [✅✅✅✅] 58: Feature 1
您的拉取请求是堆叠的。不要使用GitHub UI来合并拉取请求,如果您按错误的顺序合并,可能会将一个拉取请求推入另一个,这可能不是您想要的。相反,只需使用git spr merge
,您就可以一次性合并所有可合并的拉取请求。合并后的请求状态将在剩余 的拉取请求之后打印。
为了一次性合并所有拉取请求而不触发额外的GitHub检查,spr会找到最顶层的可合并拉取请求。然后它将所有提交合并到这个拉取请求中,合并这个请求,并关闭其余的拉取请求。这一开始可能会有些意外,并且有一些副作用,但到目前为止还没有找到更好的解决方案。
> git spr merge 已合并 #58 功能1 已合并 #59 功能2 已合并 #60 功能3 [✅❌✅✅] 61: 功能4
要只合并部分堆栈,请使用 --count
标志加上您想要合并的堆栈中的拉取请求数量。拉取请求将从堆栈底部向上合并。
> git spr merge --count 2 已合并 #58 功能1 已合并 #59 功能2 [✅❌✅✅] 61: 功能4 [✅✅✅✅] 60: 功能3
默认情况下,合并使用变基合并方法,可以通过mergeMethod配置进行更改。
开始新的堆栈是通过创建新分支实现的。例如,如果您想从当前分支的最新推送状态开始一个新的堆栈,使用 git checkout -b new_branch @{push}
。
首次运行脚本时会创建两个配置文件。 仓库配置保存在仓库基础目录的 .spr.yml 文件中。 用户特定配置保存在用户主目录的 .spr.yml 文件中。
仓库配置 | 类型 | 默认值 | 描述 |
---|---|---|---|
requireChecks | 布尔 | true | 要求检查通过才能合并 |
requireApproval | 布尔 | true | 要求拉取请求获得批准才能合并 |
githubRepoOwner | 字符串 | GitHub所有者名称(从git远程配置获取) | |
githubRepoName | 字符串 | GitHub仓库名称(从git远程配置获取) | |
githubRemote | 字符串 | origin | 要使用的GitHub远程名称 |
githubBranch | 字符串 | main | 拉取请求目标的GitHub分支 |
githubHost | 字符串 | github.com | GitHub主机,可以更新以用于GitHub企业版用例 |
mergeMethod | 字符串 | rebase | 合并方法,有效值:[rebase, squash, merge] |
mergeQueue | 布尔 | false | 使用GitHub合并队列合并拉取请求 |
prTemplatePath | 字符串 | PR模板路径(例如 .github/PULL_REQUEST_TEMPLATE/pull_request_template.md) | |
prTemplateInsertStart | 字符串 | 在PR模板中搜索以确定正文插入起始位置的文本 | |
prTemplateInsertEnd | 字符串 | 在PR模板中搜索以确定正文插入结束位置的文本 | |
mergeCheck | 字符串 | 使用 'git spr check' 强制执行合并前检查 | |
forceFetchTags | 布尔 | false | 运行 'git spr update' 时也获取标签 |
branchNameIncludeTarget | 布尔 | false | 在拉取请求分支名称中包含目标分支名称 |
showPrTitlesInStack | 布尔 | false | 在拉取请求正文的堆栈描述中显示PR标题 |
branchPushIndividually | 布尔 | false | 单独推送分支而不是原子式推送(仅在需要避免超时时启用) |
用户配置 | 类型 | 默认值 | 描述 |
---|---|---|---|
showPRLink | 布尔 | true | 显示完整的拉取请求http链接 |
logGitCommands | 布尔 | true | 将所有git命令记录到标准输出 |
logGitHubCalls | 布尔 | true | 将所有GitHub API调用记录到标准输出 |
statusBitsHeader | 布尔 | true | 显示状态位类型标头 |
statusBitsEmojis | 布尔 | true | 使用花哨的表情符号显示状态位 |
createDraftPRs | 布尔 | false | 新建的拉取请求创建为草稿状态 |
preserveTitleAndBody | 布尔 | false | 更新拉取请求时不会覆盖PR标题和正文 |
noRebase | 布尔 | false | 为true时,spr update不会在原始分支之上变基 |
如果您发现了bug,欢迎提出问题。欢迎提交拉 取请求。
如果您觉得这个脚本和我一样有用,请添加一个星标并告诉您的GitHub伙伴。
最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让 您的生活更加智能便捷。
像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号