Git 上节回顾
上一节主要对git的一些特性进行了介绍,主要介绍了Git的分离特性,我们可以利用HEAD指向一个具体的提交记录;也可以利用HEAD改变分支指向的提交记录;还可以对提交进行撤消,介绍了两种方法,接下来,对所用到的命令进行简单的回顾。
git checkout c1; //这个命令适用HEAD指向c1这个提交记录,c1表示的是哈希值
git checkout master^^; //相对引用,这个相对于master当前的提交(一般是最后一次)往上两个(几个尖尖就是往上几个)
git checkout HEAD~4; //从当前HEAD往上四个,当前HEAD默认是当前分支目前指向的提交记录
git branch -f master HEAD~4; /将master分支强制指向HEAD的第四级父提交
git reset HEAD~1; //假设master指向最后一次提交,该命令表示将分支master移动到上一次提交
git revert HEAD; //假设master指向最后一次提交,该命令将会出现一个新的提交,这个提交撤销了上次提交的修改。
具体细节请看上节:Git-高级特性1
Git 本节内容
整理提交记录
到现在我们已经学习了Git的基础知识——提交、分支以及在提交树上移动,这些概念涵盖了Git90%的功能,接下来要讨论的话题时“整理提交记录”,现在我想把某个bugFix分支上的c2提交放到master当前分支的后面,把reference分支上的c7分支放到master刚才的提交后面,应该怎么操作呢?用下面的命令。
git cherry-pick c2 c7; //假设现在HEAD指向master分支的最后一次提交,则这个命令就能满足上述需求。
操作前图示:
执行命令:
git cherry-pick c3 c4 c7; //将c3,c4,c7放到master(当前分支)的后面
操作后图示:
交互式rebase
想要熟练掌握提交记录在分支上的移动,只用前面的方法还不够,因为哈希值很长,输入很麻烦。我们可以用交互式rebase来对某一分支上的提交记录自由移动或删除。
git rebase -i HEAD~4; //表示将当前分支HEAD指向的前4级父节点提取出来,用手动对它们进行排序,看图示:
操作前:
执行命令:
git rebase -i HEAD~4;
将会出现交互界面(实际中可能是vim打开的文件),可对其进行拖拽:
拖拽顺序后执行:
标签
分支很容易被人移动,提交记录也容易被人修改,那么有没有什么可以永久指向某个提交记录的标识呢?比如软件发布新的大版本,或是修正了一些重大bug,或是增加了一些新特性,有没有什么可以比分支更好的指向这些提交的方法呢?
git tag v1 c1; //这里标识将提交c1标记为v1
检索与标签距离
由于标签在Git中起着锚点的作用,Git专门用了一个命令用来表示与你最近的锚点。
git describe master; //离master分支最新提交最近的一个标签
输出格式:v0_2_gc2 //v0表示离master最近的标签,2表示经过了几次提交,c2表示当前提交,根据下图理解
本节主要介绍了提交记录移动的方法和如何给提交记录打标签,后面将会进入到Git远程仓库操作中…