Git作为21世纪程序员必须掌握的基本技能,应该被深入研究。本周花费周末两天的时光,结合learngitbranching.js.org对Git的基本命令进行了一番学习。现将学习成果记录如下:
1.循序渐进地介绍 Git 主要命令
1.1 Git commit命令
此命令用于创建一次提交记录。在完成代码更改(修复bug或者开发新功能)之后,可以使用git commit将代码提交到本地仓库。
1.2 git branch命令
此命令用于创建一个分支,比如 git branch newImage,此命令仅仅是创建了一个分支,但是并没有将当前工作分支切换到目标分支上。
1.3 git merge命令
此命令用于将分支合并。我们新建一个分支,在其上开发某个新功能,开发完成后需要将分支合并回主线上。
执行git merge bugFix 后
1.4 git rebase 命令
git rebase是第二种合并分支的方法。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。(Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。)
git rebase master后
git rebase <目标分支> 作用是将当前分支合并到目标分支之后。
2.Git 的超棒特性
2.1 分离 HEAD
HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。在命令执行之前的状态如下所示:
HEAD -> master -> C1
HEAD 指向 master, master 指向 C1
git checkout c1 
2.2 相对引用
在实际生产中通过指定提交记录哈希值的方式在git移动是不方便的。因此提供了两个符号来进行方便的移动( ^ 和 ~ )。
其中多个^可以连写,如^^^表示向上游移动四次。
git checkout master^ 
~<number>可以指定向上游移动的次数。
git checkout HEAD~4 
另外git branch -f master HEAD~3 命令会将 master 分支强制指向 HEAD 的第 3 级父提交
git branch -f master HEAD~3 
2.3 撤销变更
git中撤销变更有两个命令:git reset与git revert
git reset HEAD~后 
git revert HEAD~后

奇怪!在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2' 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2' 的状态与 C1 是相同的。
revert 之后就可以把你的更改推送到远程仓库与别人分享啦。