最开始使用Git的时候,学了 clone 和 pull 之后就觉得这样够用了,只是下载感兴趣的项目源码。
后来为了看源码在一段时间内有哪些改动,学了 log 、 show 和 diff 。
为了找到感兴趣内容所在的文件,学了 grep 。
接着发现上游有多个分支,为了查看不同分支,学了 branch 和 checkout (现在一般用 switch)。
因为上游用了 submodule 所以也稍微学了一下。
在网络不理想的时候,为了从镜像拉取,学了 remote 。
因为手痒,想自己给项目添加内容,为了让自己写的东西纳入 git 管理,学了 commit (那时候用的还是 commit -a ,用不到 add)。
大概是这时候,第一次遇到了躲不开的配置项,也就是 config 。
从上游拉取时,为了不和自己写的东西冲突,学了 merge 、 add 和 status,后来又学了 fetch 和 rebase 。
为了提 Pull Request,也为了备份自己写的东西,学了 push 。
为了把其他分支的修改转移到当前分支,学了 cherry-pick 。
为了撤回修改,学了 reset (当时的需求现在可以用 restore 完成)。
为了恢复不慎删除的内容,学了 reflog 。
为了保存写到一半的内容,学了 stash 。
为了找到引入或修复 bug 的版本,学了 bisect 和 blame 。
为了知道最近的 tag 名称,学了 describe 。
为了知道 tag 对应的提交代码,学了 rev-parse 。
(以上两条是为了更方便地 blame 。)
为了同时访问多个分支,学了 worktree 。
为了降低索引的大小,学了 gc 、 prune 和 repack 。
最近还学到用 ls-files 查看自己改了哪些文件。
当然过程中也断断续续学了不少选项,比如 commit --amend 、pull --rebase 、rebase --autostash、commit --fixup 、rebase --autosquash 等。
到这里我觉得我已经认识了大多数初级指令。但是对于如何使用 hook,如何直接操作索引中的对象,我还是一无所知。对于使用邮件的工作流程,我也不太了解。
回想起来,从一开始到现在,学的每个东西都是为了能用就行。
但是因为有这么多需要,也确实只有学习这么多东西才够用。