git | 多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
1.要查看远程库的信息 使用git remote
2.要查看远程库的详细信息 使用git remote –v

git | 多人协作_第1张图片
查看远程库

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

推送分支

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

比如我现在的github上的readme.txt文件内容如下:

git | 多人协作_第2张图片
github上的readme.txt的内容如图

本地是这样的:


git | 多人协作_第3张图片
这是本地的内容

现在我想把本地更新的readme.txt代码推送到远程库中,使用命令如下:

$ git push origin master

【这是我出现的问题】


git | 多人协作_第4张图片
我在push的途中出现问题了,文件有修改冲突

后来在网上查看,修改了两者的冲突之后,用git push -f origin master强制推送上去。(网上说的其他方法有用过,什么pull之后fench之类的,但是不起作用,目前看来直接强推反而起作用了。可能是自己实践不到位)

git | 多人协作_第5张图片
强制推送

我们可以看到如上,推送成功,我们可以继续来截图github上的readme.txt内容 如下:

git | 多人协作_第6张图片
成功推送了内容

可以看到推送成功了,如果我们现在要推送到其他分支,比如dev分支上,我们还是那个命令

git push origin dev

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
1.master分支是主分支,因此要时刻与远程同步;
2.dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
3.bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug
4.feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

抓取分支

多人协作时,大家都会往masterdev分支上推送各自的修改。
现在,模拟一个你的小伙伴,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者同一台电脑的另一个目录下克隆,新建一个目录名字叫testgit2:

git | 多人协作_第7张图片
克隆远程库到testgit2上来
git | 多人协作_第8张图片
本地有克隆的learngit这个库的内容了

现在,你的小伙伴要在dev分支上开发,就必须创建远程origindev分支到本地,于是他用这个命令创建本地dev分支:

$ git checkout -b dev origin/dev
git | 多人协作_第9张图片
完整操作
git | 多人协作_第10张图片
这是还未push新改的dev分之前的内容
git | 多人协作_第11张图片
刚刚push之后远程dev分支的内容

小伙伴们已经向origin/dev分支上推送了提交,而我在我的目录文件下也对同样的文件同个地方作了修改,也试图推送到远程库时,如下:

git | 多人协作_第12张图片
自己修改推送同一个文件时报错

由上面可知:推送失败,因为我的小伙伴最新提交的和我试图推送的有冲突,解决的办法也很简单,上面已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后在本地合并,解决冲突,再推送。

git | 多人协作_第13张图片
pull失败了

git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接:

$ git branch --set-upstream dev origin/dev
git | 多人协作_第14张图片
这张图是别人的

【这张图是别人的,因为我自己操作的时候,不知道怎么跳转到unix界面去了,导致无法同步了,我重新进去的时候提示我自己的dev分支能够直接push。。。(迷)然后我模拟testgit2那边push dev分支,可能是由于设置过dev链接的原因,直接pull成功了,就是告诉有冲突】

git | 多人协作_第15张图片
这张是自己反向模拟的,意思就是假设自己已经推送完成,用同事的电脑再来推送同一个文件

上面两图都告知我们merge conflict有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push

git | 多人协作_第16张图片
冲突内容
git | 多人协作_第17张图片
这时推送成功了

小结

因此,多人协作的工作模式通常是这样:
1.首先,可以试图用 git push origin branch-name推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新早(别人已经先push上去过了),需要先用git pull试图合并。
3.如果合并有冲突,则需要解决冲突,并在本地提交(也就是add+commit)。没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!。
4.如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

-查看远程库信息,使用git remote -v
-本地新建的分支如果不推送到远程,对其他人就是不可见的;
-从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
-在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
-建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
-从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

你可能感兴趣的:(git | 多人协作)