注意
此功能以公共预览版提供,可能会发生更改。
本文介绍使用堆积拉取请求时可能会遇到的常见问题,以及如何解决这些问题。
变基报告冲突
当级联变基遇到冲突时,gh stack rebase 会停止并列出发生冲突的文件。
若要解决冲突并继续:
-
打开每个冲突的文件并解决冲突标记(
<<<<<<<、、=======``>>>>>>>)。 -
暂存已解析的文件。
git add . -
继续重定基。 其余分支会自动重新定基。
gh stack rebase --continue
如果冲突过于复杂,或者你想重新开始,请中止变基,以将所有分支恢复到变基前的状态。
gh stack rebase --abort
由于冲突而停止同步
如果在运行 gh stack sync 时检测到冲突,所有分支都会恢复到原始状态,因此不会有任何内容处于仅部分更新的状态。 通过直接运行存储库以交互方式解决冲突,然后推送更新的分支。
gh stack rebase
gh stack push
修改会话无法启动
gh stack modify 需要一个干净的初始状态。 如果无法启动,请确认:
- 您当前已检出一个活动堆栈。
- 工作区是干净的。
- 没有正在进行的重新基。
- 没有拉取请求处于等待合并队列中。
- 提交历史记录是线性的。 如果不是,请先运行
gh stack rebase。
修改会话被中断
例如,如果 gh stack modify 由于不想解决的冲突或终端崩溃而中断,则可以将堆栈还原到启动前的状态。 预修改快照缓存在本地进行恢复。
gh stack modify --abort
如果在应用更改时发生冲突,而你想改为继续进行,请先解决冲突,使用 git add 暂存这些文件,然后运行 gh stack modify --continue。
拉取请求无法合并
只有当堆栈中的某个拉取请求及其下方的每个拉取请求都满足所有合并要求,并且该堆栈具有完全线性的历史记录时,该拉取请求才能合并。 如果合并被阻止,请检查:
- 该拉取请求及其下方的所有拉取请求都已获得所需审查并通过检查。
- 堆栈具有线性历史记录。 如果更改被推送到了较低层级的分支,或者主干已向前推进,那么历史记录可能不再保持线性。
若要还原线性历史记录,请运行 gh stack rebase ,然后单击 gh stack push合并框中的 Rebase 堆栈 。 有关说明,请参阅“管理堆积拉取请求”。
合并在堆栈中途停止
合并前检查在任何合并之前运行,但合并仍可能失败。 例如,由于发生意外冲突或间歇性故障。 如果中途出现故障,合并将在该拉取请求处停止。
- 其下方已成功合并的拉取请求仍保留在基分支中。
- 失败的拉取请求及其上方的拉取请求保持打开状态。
解决失败的拉取请求中的问题,然后再次尝试合并,以合入该堆栈的其余部分。
拉取请求已从合并队列中移除
堆栈保存在合并队列中。 如果某个拉取请求从队列中被移除或被剔除,则该堆栈中位于其上方的所有拉取请求也会被剔除并从队列中移除。 解决基础问题后,将堆栈重新添加到队列。
较大的变更栈也可能会跨连续的合并组拆分:为保持整个栈不被拆开,合并队列允许某个合并组最多超出其配置的最大大小 50%;而任何当前组放不下的拉取请求都会继续进入后续组,直到整个栈全部完成合并。
你关闭了位于堆栈中间的拉取请求
关闭堆栈中间的拉取请求会阻止其上方的所有拉取请求可合并。 保留堆栈关系,因此若要打开不同的拉取请求或更改堆栈的结构,必须先解散堆栈,然后重新创建它。
您可以在 GitHub 网站上取消堆叠,或使用 gh stack modify 重组堆叠。 取消堆叠仅会移除开放状态、草稿和已关闭的拉取请求;已合并和已排队的拉取请求仍保留在堆叠中。 请参阅 管理堆积拉取请求 和 管理堆积拉取请求。
不能跨分叉创建堆栈
堆积拉取请求要求所有分支都位于同一存储库中。 不支持跨分支堆栈。