目录
git和其他版本管理软件一样,最令人兴奋的一点是可以实现多人协作。
多个人共同完成一个项目,非常容易起冲突,熟练使用git各种功能可以有效避免冲突,也能进一步提高工作效率。
下面我们就来看一下git如何实现多人协作。
1 多用户
1.1 Josh
现在假设来了一个新同事 Josh ,共同完成这个任务。
如果想要加入项目,必须先下载原有的代码(假设他的电脑已经配置好了git)
$ git clone git@github.com:aimxu/testgit.git
代码下载下来,就可以开始项目了,而他分到的任务是添加一个减法功能。于是他添加了一个新的分支,叫 feature2。
编写代码
然后就可以上传了,根据之前学习的命令,一步一步走,可能比较着急,没有管对不对,就直接上传到远程仓库
git add .
git commit -m "add substract"
git push -u origin feature2
这时候上传的是feature2
这时候在远程仓库中,尽管没有看到添加的减法功能,注意到了一点变化,没错,多一个branch
我们可以看到两个branch中,feature2是活动的branch,这个不难理解,因为我们没有上传的时候没有切换branch到master,这样做会不是有问题呢?
1.2 aimxu
这个问题其实不大,因为如果 feature2 是 Josh 自己维护的,其他人一般不会用到 feature2 这个分支,但是不是还有什么问题?
没错,没有合并分支,master 分支还是没有减法功能,因此如果 Josh 想让其他同事用到自己的功能,必须合并分支
从上面的图可以看到原来的用户aimxu,根本没有看到新的减法功能,那没有办法得到 Josh 的工作了吗?其实是可以的(虽然一般不这样做)
git pull origin feature2:feature2
origin:连接的名称
第一个feature2,远程仓库的分支名
第二个feature2,本地仓库的分支名
【注】push也是可以选择分支上传代码
git push -u origin <local_branch>:<remote_branch>
这里的顺序跟pull反过来
可以这样记忆,代码的总是从左到右的
pull(拉)是从远程下载到本地( remote -> local )
push(推)是从本地上传到远程( local -> remote )
2 删除分支
这时候,不管是谁已经完成了分支的合并,并删除了远程仓库的分支,只有一个分支master
git push origin --delete feature2
通过origin连接,删除远程仓库的 feature2 分支。
但是突然发现,原来 Josh 写的代码错了。
经管完成了减法操作,但是在主函数中,并没有 #include“dec.h”,这样执行程序肯定是错的
这是 Josh 肯定瑟瑟发抖,自己的错误已经整合到主分支了,很有可能会影响到后面的工作,
不慌,这是只要新建一个原来的分支,如果忘了分支名,可以用 git reflog查看删除了的分支的记录,找到合并前的分支号
reflog是reference log的意思,可以查询和版本相关的历史操作,但是版本号好像有什么不同
没错,版本号特别短,只有7位,其实这里是版本号的前7位,已经可以代表该版本了。
这时回退版本,再新建分支feature2,修改错误,合并上传
git switch -c feature2
# 修改代码
git add .
git commit -m "add substract"
git switch master
git merge freature2
git branch -d feature2
git push
解释一下最后一句
3 冲突
在 Josh 为了他的部分焦头烂额的时候,aimxu也接到了新的任务,需要为程序添加一个乘法功能。
老司机二话不说就开干,忙活了两分钟完成该功能。
等一下,是不是有点似曾相识?
没错,还是少了那一句 #include"dec.h",Why????(参考上一节)
此时 Josh 已经完成了修复,但是,但是,aimxu 忘了pull,忘了pull,忘了pull!!!
就push了
git add .
git commit -m "add multiplation"
git push
为了简单起见,没有用新的分支
果不其然,又来了
最后只能乖乖地pull一下,查看hello.c,发现一大堆要改的
红色部分框部分是自己添加的内容,蓝色框部分是别人添加的内容,需要手动整合一下,再上传一次
因此
在修改代码之前,必须先pull,至于什么时候pull,网上有很多参考的文章,可以参考隔壁的一篇文章,讲得还是很有道理的。
4 最后
其实git有很多功能,很多情况,但是总的一句而言,git只是个工具,没有必要把它研究透了,遇到各种情况再好好地分析,学习新的特性就可以了,在最开始,只需要掌握简单,最核心的部分就可以了。
在每次操作前,务必三思,尤其是初学者,经常会因为脑子一热,写错命令,导致代码丢失,遇到这种情况千万不要慌张,捋清楚思路,一步一步的把代码还原回来。在这期间只要不是频繁操作,都有很大的可能性能还原回来的。
所以在最开始务必自己用一个小程序来练手,千万不要把有价值的代码用来练手,否则将会得不偿失。
就简单写到这里吧。有时间的话再添加一些内容。
5 附录
git常用命令速查表
链接:https://pan.baidu.com/s/1XgZ81uf3OidNtKHHC6o5yw
提取码:ckom