如果在 Mac 上工作时 Git 变基停止了,首先使用 git status 检查它是否仍在进行中。若要恢复,请解决每个冲突,仅暂存已解决的文件,然后运行 git rebase --continue。若要返回到变基前的分支状态,请运行 git rebase --abort。这些选项的作用各不相同,因此在输入命令之前请确认你想要的结果。
1. 重新打开代码仓库并检查其状态
通过“聚焦”(Spotlight)或访达(Finder)的“应用程序”>“实用工具”文件夹打开“终端”。在“终端”中,进入该仓库的顶级目录,然后检查其状态:
cd '/path/to/your/repository'
git status
将示例路径替换为你仓库的实际路径。如果输入的路径包含空格或 Shell 元字符,请如上所示用单引号将其引起来。“终端”的默认 Shell 是 zsh,不过管理员或你的个人设置可能会指定其他 Shell。Apple 的“终端”使用手册
如果 Git 提示变基正在进行中,请阅读状态输出以了解冲突路径和当前步骤。如果未提示存在活跃的变基,请不要盲目尝试运行 --continue 或 --abort;在判断发生了什么之前,先查看状态和最近的历史记录。git status 会报告工作区和暂存区的更改(包括未跟踪的文件),因此请完整阅读其输出,而不是假定每个文件都属于此次变基。Git 的 git status 文档
2. 仔细解决冲突以恢复变基
在编辑器中打开每个冲突的文件。Git 会使用形如 <<<<<<<、======= 和 >>>>>>> 的标记来标出文本冲突区域。确定最终内容应为何种形式,编辑文件并删除冲突标记。不要自动接受其中一方的内容,除非那完全符合预期的代码或文本。Git 的变基指南介绍了冲突解决的顺序:编辑文件、暂存解决结果,然后继续。Git 的 git rebase 文档
返回“终端”,在暂存前检查相关更改。例如:
git diff
使用 git status 显示的真实路径,按名称暂存每个已解决的路径:
git add 'path/to/resolved-file'
git status
git rebase --continue
引号用于保护包含空格或 Shell 元字符的路径;如果路径不需要加引号,可以省略。git add 会暂存指定文件的当前内容,因此如果文件包含不相关的修改,请先检查 diff。再次检查状态,确认已暂存正确的解决结果。Git 可能会在另一个冲突处再次暂停,或者要求你编辑提交信息;按照提示操作,然后重复解决、暂存和继续的步骤。Git 的 git add 文档
仅当你明确想要丢弃当前正在重放的提交时,才使用 git rebase --skip。它会跳过该补丁;这并不是恢复同一个提交的另一种方式。如果你不确定跳过是否会丢弃需要的工作,请不要使用它。Git 的 git rebase 选项
3. 当你想要撤销变基时终止操作
如果你想停止操作并恢复到最初的分支状态,请运行:
git rebase --abort
git status
Git 文档指出,--abort 会将 HEAD 重置为原来的分支位置(或者如果在变基开始时指定了分支,则重置为所提供的分支)。然后检查状态并验证结果是否符合预期。Git 的 git rebase 文档
切勿将 --abort 与 --quit 混淆。git rebase --quit 会结束变基操作,但会将 HEAD、暂存区和工作区保持在当前时刻的状态。仅当你明确想要停止变基但保留当前进行中的状态时才选择它;它不会恢复到变基前的分支位置。如果变基时使用了 --autostash,Git 会在退出时保留该临时贮藏(stash)。Git 的 git rebase 选项
4. 如果“终端”已关闭或状态不明确
单凭关闭“终端”窗口本身,无法判断 Git 是否已完成变基。重新打开仓库并运行 git status;根据报告的状态继续操作。在现有变基仍处于活跃状态时,不要重新运行原来的 git rebase 命令。
如果意外中断导致仓库处于 Git 无法再识别出活跃变基的状态,请避免盲目手动删除 .git 状态文件或凭猜测使用 reset --hard。Git 文档指出,如果在使用 apply 后端时遭遇不合时宜的中断,可能会导致后续的 --abort 无法干净地终止变基。首先保护好所有有价值的未提交工作,然后检查 git status 和 git reflog 以了解最近的分支移动情况。reflog 记录了本地分支顶端的最新更新;它可以帮助识别先前的提交,但恢复操作应当谨慎进行。Git 变基可中断性说明、Git 的 git reflog 文档
对于普通的冲突中断情况,安全的决策很简单:在执行 --continue 之前解决并暂存预期的更改,或者在想要放弃变基并回到起点时使用 --abort。无论执行哪种操作,之后都请再次检查 git status,以便清楚掌握 Mac 上工作副本的实际状态。
参考来源
在 Mac 上打开或退出“终端” — Apple 支持
Git - git-status 文档 — Git
Git - git-rebase 文档 — Git
Git - git-add 文档 — Git
Git - git-reflog 文档 — Git