Git已经彻底打败SVN,成为版本控制工具的老大。有了Git,无需服务器就可以保存自己的工作进度,包括但不限于源码、文档,等等。

那么Git能不能被用来做『稳健不出错的』现场演示呢?众所周知,现场敲代码演示是有风险的,平时下面敲代码运行很得心应手,但有时偏偏在演讲现场却容易被各种突发状况卡壳,演示不下去了。所以,我们能不能实现把演讲时,一步一步的场景暂存起来,到演讲的时候,首先展示初始化的状态,然后一步一步Next,还原程序是如何一步一步实现的呢?

既然Git可以保存工作进度,那就可以利用Git,将要展示的步骤分提交(commit)暂存起来,到演示的时候,逐个提交还原场景。但Git并没有提供简介的一条命令,一键逐步还原。Git中可以通过在HEAD后面加^来一步一步获得历史提交。但是我们演示的场景是:

假设我们master的提交序列如下:

1
init(初始化提交) -> C1 -> C2 -> C3 -> C4(最终提交,成型)

我们演示一开始,给大家看到的是init,然后逐步C1 -> C2 -> C3 -> C4。而HEAD^的遍历方式是Previous:C4 -> C3 -> C2 -> C1 -> init。那么有没有Nextinit -> C1 -> C2 -> C3 -> C4模式的呢?

Git自身没有提供这样的命令,但是Git提供了alias,我们是否可以通过alias,创建一个git next命令,逐步还原呢?当然可以,Git的alias不仅仅可以配置Git命令的别名,甚至可以配置Shell命令的别名。经过一番shell的编程,最终git next命令诞生了!

演示步骤

  1. 首先基于init提交,创建一个演示分支demo, 并切换demo分支上。这时的提交序列只有 init
  2. $ git next //这时提交序列有 init -> C1
  3. $ git next //这时提交序列有 init -> C1 -> C2
  4. $ git next //这时提交序列有 init -> C1 -> C2 -> C3
  5. $ git next //这时提交序列有 init -> C1 -> C2 -> C3 -> C4

通过上面,可以看到,整个演示过程从最初的白板,一步一步,复盘,到最终成型的样子。

如何配置git next别名

编辑Git的配置文件~/.gitconfig, 添加如下alias配置

1
2
[alias]
next = "! git log --reverse --ancestry-path ..master|head -1|awk '{print $2}'|xargs git rebase"