⑴大量的撤销/恢复
⑵场景: 你向某个方向开始实现一个特性,但是半路你意识到另一个方案更好。你已经进行了十几次提交,但你现在只需要其中的一部分。你希望其他不需要的提交统统消失。
⑶方法: git rebase -i 《earlier SHA》
⑷原理: -i 参数让 rebase 进入“交互模式”。它开始类似于前面讨论的 rebase,但在重新进行任何提交之前,它会暂停下来并允许你详细地修改每个提交。
⑸rebase -i 会打开你的缺省,里面列出候选的提交。如下所示:
⑹前面两列是键:第一个是选定的命令,对应第二列里的 SHA 确定的 mit。缺省情况下, rebase -i 假定每个 mit 都要通过 pick 命令被运用。
⑺要丢弃一个 mit,只要在编辑器里删除那一行就行了。如果你不再需要项目里的那几个错误的提交,你可以删除上例中的、、行。
⑻如果你需要保留 mit 的内容,而是对 mit 消息进行编辑,你可以使用 reword 命令。 把第一列里的 pick 替换为 reword (或者直接用 r。有人会觉得在这里直接重写 mit 消息就行了,但是这样不管用 —rebase -i 会忽略 SHA 列前面的任何东西。它后面的文本只是用来帮助我们记住 fe 是干啥的。当你完成 rebase -i 的操作之后,你会被提示输入需要编写的任何 mit 消息。
⑼如果你需要把两个 mit 合并到一起,你可以使用 squash 或 fixup 命令,如下所示:
⑽squash 和 fixup 会“向上”合并 — 带有这两个命令的 mit 会被合并到它的前一个 mit 里。在这个例子里, fe 和 e 会被合并成一个 mit, fee 和 aff 会被合并成另一个。
⑾如果你选择了 squash, Git 会提示我们给新合并的 mit 一个新的 mit 消息; fixup 则会把合并清单里第一个 mit 的消息直接给新合并的 mit 。 这里,你知道 aff 是一个“完了完了…。” 的 mit,所以你会留着 fee 的 mit 消息,但你会给合并了 fe 和 e 的新 mit 编写一个新的消息。
⑿在你保存并退出编辑器的时候,Git 会按从顶部到底部的顺序运用你的 mit。你可以通过在保存前修改 mit 顺序来改变运用的顺序。如果你愿意,你也可以通过如下安排把 aff 和 fe 合并到一起: