git是什么?一个高端大气上档次的分布式版本控制系统。
相信小伙伴们对于git 并不陌生。对它当中文件的三种状态:已修改(modified),已暂存(staged),已提交(committed)很熟悉啦,只要是写代码就天天见。对应的三种操作:
-
git add XX
:文件修改添加到暂存区 -
git commit -m "XX"
:把暂存区的所有内容提交到当前分支 -
git push XXX
:把本地的代码提交到远程
哈哈,这三条命令小伙伴们估计都十分清楚,毕竟天天的都在使用,下面我们来说点别的吧。
版本回退
哎呀,把文件改的乱成一团糟了,想看看以前写的,怎么办?版本回退呗(两步走)。
- 用
git log
查看你的历史记录,这条命令会显示从最近到最远的提交日志,你会看见很多类似567893455...897655....
的数字,这就是你的版本号啦。 - 用
git reset --hard 56789
这个命令就可以回到这个版本号所代表的版本啦。(版本号用哈西值表示,很长,回退时只用输如前几个就好了,git会自动帮你找的。)
撤销修改
当突然发现这次的修改是没有意义的,怎么办?撤销。加入你当前修改的文件的 aaa.js
,那么就用git checkout -- aaa.js
,它会丢弃你对工作区的修改。
如果你此时还没有add到暂存区,那么用这个命令后就会回到和版本库一样的状态了。若果此时已经add了,好吧,那就会回到添加到暂存区后的状态。
删除文件
假如你已经git add 和commit 了一个文件bbb.js
,然后你在文件管理器中却把bbb.js给删了,用git status看下,它会告诉你删除了bbb.js这个文件。这里就有两种情况了:
- 你确实是打算从git 版本库里删除这个文件,那就先用
git rm bbb.js
删掉,再用git commit -m " XXX "
一下,你就从版本库里删掉了。 - 如果你是不小心误删的,好吧,没有关系,
git checkout -- bbb.js
你就可以找回来了,因为git checkout
其实是用版本库里的版本替换工作区的版本。
分支管理
很多小伙伴们在一起开发时写代码时可能会遇到这样的尴尬情况,你的代码还没写完,如果提交代码到主分支可能会影响整个系统代码使别人的代码无法工作。如果不提交要是突然电脑坏了代码都找不到了,那该怎么办?又或者这样,当你正开发的好嗨皮的时候,boss来了让你干个其它的很紧急的活吧,这时候怎么弄?分支可以帮你解决这个问题。
-
git checkout -b dev
建立一个叫div的分支并切换到该分支
git checkout
命令加上-b参数表示创建并切换,相当于git branch dev
和git checkout dev
两条命令
-
git branch
命令查看当前所有的分支,并在当前分支前会标一个*
号 - 完成dev上的开发提交后用
git checkout master
可以切回master分支了 - 如果想在主分支上看见dev上开发的成果,那就合并分支吧,就dev合并在主分支上
git merge dev
,合并后就可以在master上看见dev的提交了。 - 合并完了就可以删除dev分支了,用这个命令
git branch -d dev
就可以啦。
用上面方法合并分支时,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,命令长这样
git merge --no-ff -m "merge with no-ff" dev
(其中--no-ff表示禁用Fast forward模式),Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
没有用--no-ff的合并长这样:
用--no-ff的合并长这样:
小插曲:
- 我们要在新分支上工作时,可以把当前的工作区的东西暂存起来,用
git stash
命令,再次回来可以用git stash pop
,回到工作现场。 - 合并分支还有另一个办法
rebaseing
,它和merge
的区别,就参考这篇文章.
解决冲突
有时候,当master分支和dev分支各自都分别有新的提交,git 合并时就会出现冲突,有时git 会自动解决冲突,但有时就需要手动解决冲突了。我常用的IDE是WebStorm,它提供了很好用的解决冲突的插件。打开WebStorm ->用快捷键Ctrl +shift+A
打开窗口 -> 输入Resolve Conflicts...
就可以打开解决冲突的工具啦,很好用的哦!
解决完冲突后再次提交代码就OK啦,用git log --graph
命令可以看到分支合并图。
最后,创建自己的密钥并在github上配置,这样使用git命令时不需要每次输入密码,参见教程,再给大家推荐一个很好玩的闯关的游戏吧,如果实在过不去了,就看看参考答案吧!(参考答案见参考文2,3,4,5,6)
参考文章:
1.http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
2.https://codingstyle.cn/topics/57 (2~10关)
3.https://codingstyle.cn/topics/67 (11~20关)
4.https://codingstyle.cn/topics/73 (21~30关)
5.https://codingstyle.cn/topics/178 (31~40关)
6.https://codingstyle.cn/topics/181 (41~55关)