L_Git@IT·互联网iOS Developer

想要高效的协同开发吗?用Git吧!

2016-08-05  本文已影响921人  carson6931

简介

还是先了解些概念性的东西吧!

新建git库

若是建本地仓库,则在文件夹根目录下git init 即可,新增.git 文件夹既是git 仓库。
实际开发中一般是先在github 新建远端仓库,然后git clone到本地,clone 下来的文件已经有本地仓库,不需要git init。

提交

Git 上的提交流程也蛮easy,修改之后git add . 默认全部暂存,提交写个提交信息 git commit -m"..."就算完成提交了。你想推到远端那就git push。
对应的各种文件状态:

修改文件testabc.txt,文件处于modified 状态,但是unstage。 **git add . **添加至暂存区,文件staged **git commit -m""**提交至本地仓库,提交之后可看到超出远端分支一个commit,可以用git push 推到远端

分支

前面说了分支是git 最为重要的东西,一切操作都是基于分支。什么都不做,建好git 仓库之后,默认为master分支,即主分支。
一条分支可以理解为一条工作线,推动工作线不断向前的便是commit。

查看所有本地分支,查看当前分支状态 develop merge carson

2、rebase
rebase 又称衍合,但与merge不一样,它是一种变基操作。a rebase b,会将a 的最新提交重新以b为基座运用一遍。


carson rebase develop

下面是坑:
在不考虑远端分支的情况下,merge、rebase 都没什么问题,都能完成合并工作。但考虑远端分支,特别是多人协同开发时,使用rebase 就要注意了。弄不好就把别人写好的代码给冲掉了。
具体情景:
在节点c2新建你的carson分支之后,你已经在你的分支上做了push操作,也就是说origin/carson指向的节点领先与基点c2。

carson rebase develop
这种情况是carson 落后于origin/carson,就好比多人开发,你的同事在carson 分支上提交并push了,你这边会落后于origin/carson,你本地没有拉去你同事的最新代码,此时你想用rebase把develop上的代码合过来。合完之后会发现carson 分支与origin/carson 出现了差异。那这时git 会提示你又要拉取代码,又要push代码,这样操作的后果还不算太坏,也就出现几个相同的commit,最坏的结果是,你不pull,直接强制push。那后果就比较严重了,好比c5是你同事的提交,你强制push之后,c5就没了,origin和origin/carson 都指向c4,这就是把代码给冲掉了。如果这个时候你的同事再取拉代码,那本地的c5也没了,工作全白费了。
强制push之后C5被冲掉了
所以rebase 的使用要分情况了,同时强制push 也不是没有好处,有时push了一个错误代码,你可以reset 本地,修改之后再强制push,冲掉远端仓库的错误代码。

pull、fetch、pull --rebase

相信这样的等式大家看到很多次了,但我还是想结合图形来直观说明下。
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase

git fetch 只是让远端分支的指针origin/分支名指向最新,不改变本地分支,一般在联网情况下fetch 操作不用执行,感觉单独执行git fetch 无太大的实际意义。

本地与远端分叉的情况
看看git pull:

相当于用carson merge origin/carson
看看git pull --rebase:
相当于用carson rebase origin/carson
这种情况下用pull 、pull --rebase 出现的分支图会有差异。用哪种看个人喜好了,一般rebase会保证一条线,也不会出合成新的commit,比较干净。

当本地与远端没分叉,在一条线上,这种情况下pull 、pull --rebase 效果都一样。

实用操作

总结

刚来公司CTO就说“不会用git的程序员不是好程序员”,确实,git 功能强大,设计非常优秀,对于项目开发管理再适合不过。不会用git 如何跟团队一起高效的协同工作?上面所提的只是一些入门的知识点,没介绍太多命令,因为命令随便搜搜就能查到,重要的还是想多介绍些Git 工作原理,原理弄明白了才能真正做到会用。还不会使用的朋友看完这篇希望对你有所帮助。

上一篇下一篇

猜你喜欢

热点阅读