这篇其实写出来意义不大,git怎么学习,怎么熟,多用就好了啊,推荐廖雪峰老师的git学习教程、和所有能Google出来的技术博客和技术教程。有一些趣味性很足的的git在线学习,推荐tryGit和Learn Git Branching。
Git只是一个工具,用不用它,都是个人的选择,你觉得好,工作提升了效率,那就接着用呗,你要觉得我不用照样写代码写的好好的,也行。工具也会变,也会迭代,要学会理解git思考的方法和存在的意义。
Learn Git Branching这个学习方法很有意思,思考性和趣味性很足,也有助于理解,我就解题来帮助理解一下Git这个工具(不常用到的,不写了)。
1.1 Introduction to Git Commits
commit像一个更大更好的粘贴复制,提交轻便,不只是提交时复制整个目录,更可以提交一组变化一个增量。
在commit过程中,尽量变化都是有意义的,提交才是有意义的。另外commit是在本地,要push到远程库。
answer: $ git commit
$ git commit
1.2 Branching in Git
分支个人的理解是,我要把某个功能添上去,bug给修好,又不能妨碍人家工作,我就默默拉出条线来自己干,做完之后,我再合并回去,谁都不影响。这上面写的一句话「branch early, and branch often」觉得很有意思,早早分支,多多分支,你们感受一下。
answer: $ git checkout -b bugFix
1.3 Merging in Git
这个就是上文说的把自己干好的活合并回去。
answer:$ git checkout -b bugFix
$ git commit
$ git checkout bugFix
$ git checkout master
$ git commit
$ git merge bugFix
1.4 Rebase Introduction
这是把工作结合起来的第二种方法,不是那种合并起来,而是把一系列的commit复制下来,优点是commit的提交序列很好,提交日志和仓库历史很干净。
answer: $ git checkout -b bugFix
$ git commit
$ git checkout master
$ git commit
$ git checkout bugFix
$ git rebase master
2.1 Detach yo’ HEAD
什么是HEAD,Stack Overflow上面的高票回答很好,我觉得没有比这个更好的解释,他的意思是你可以把它看做“当前分支”,当你用 git checkout切换分支的时候,HEAD调整变化指向新分支的最尖端。
answer:$git checkout C4
2.2 Relative refs (^)
通过明确的commit哈希数在git中移动,而在终端里你需要用git log来查看哈希数值,哈希值有点长,Git关于哈希数很聪明,你只需要指定足够的哈希值来确定唯一提交就行,而不需要键入一长串。
answer:$ git checkout C4
2.3 Relative refs #2 (~)
"~"符号可以帮助你在commit树上移动。比如 「git checkout HEAD~4」就可以帮助你返回一连串的提交。Branch forcing 「git branch -f branchName location」可以非常快速的移动一个分支到指定位置.
answer: $ git branch -f master C6
$ git branch -f bugFix C0
$ git checkout C1
2.4 Reversing Changes in Git
在 Git 里主要用两种方法来撤销变动 —— 一种是 git reset,另外一种是 git revert。git reset往回移动分支,来撤销更改,但是这只是对自己本地分支进行更改,revert却可以撤销更改并且告诉大家我更改回去了。
answer: $ git reset local~1
$ git checkout pushed
$ git revert pushed
因为后面的命令不常用,所以不写了, 但挑战更有难度,也很有意思,各位可以做着试试看。