打理历史——rebase、stash、tag、cherry-pick
这是修整已有历史的手艺。威力大,也随之带来一条绝不能破的黄金法则。
学习目标
- 能用交互式 rebase 整理自己的历史
- 能把手头的活儿先搁一边,之后再取回来
- 能用 tag 标出发布点,用 cherry-pick 单独摘一个提交过来
从这里开始,动的是已经写下的历史。git rebase 把你的提交挪到另一个提交之上重新接好,把历史捋成一条直线。如果说 merge 留下的是「事情本来的样子」,rebase 整理的是「读起来的样子」。加上 -i(交互式),你能在公开之前把提交合并、改写信息或调换顺序。
只有一条黄金法则:**已经和别人共享过的提交,不要 rebase。** rebase 会新建提交把原来的替换掉,如果别人正基于原提交在做事,历史就分叉了,收拾起来很麻烦。在自己分支上、开 PR 之前尽管用,之后就别碰了。
git stash 把没做完的活儿先搁到架子上——突然来了紧急 bug、必须马上切分支时就用它。git tag 给某个提交钉上 v1.0.0 这样的名字,让你能精确找回发布时的代码。git cherry-pick 从别的分支上只摘一个提交过来。这三样都是「不整体、只取局部」时用的工具。
本步骤要掌握的命令
别光用眼睛看,去终端里真敲一遍。手记住了,工作时才使得出来。
git rebase -i HEAD~3- 交互式整理最近三个提交:合并、改信息、调顺序。
git stash push -m "작업 중"- 把当前改动连同备注收起来,好马上切换分支。
git tag -a v1.0.0 -m "첫 배포"- 给这个提交打上带说明的标签,标为发布点。
git cherry-pick <commit>- 只把别的分支上的某一个提交拿到当前分支来。