Git教程之多人协作

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

或者,用git remote -v显示更详细的信息:

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

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

$ git push origin master把本地的master分支推送到远程库origin上

如果要推送其他分支,比如dev,就改成:

$ git push origin dev
把本地的dev分支推送到远程库origin上

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
    master分支是主分支,因此要时刻与远程同步;
    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

抓取分支

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

$ git clone [email protected]:winner0715/learngit.git
Cloning into ‘learngit‘...
remote: Counting objects: 46, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 46 (delta 16), reused 45 (delta 15)
Receiving objects: 100% (46/46), 15.69 KiB | 6 KiB/s, done.
Resolving deltas: 100% (16/16), done.

当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看:

$ git branch
* master

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

$ git checkout -b dev origin/dev

现在,他就可以在dev上继续修改,然后,时不时地把dev分支push到远程:

$ git commit -m "add /usr/bin/env"
[dev 291bea8] add /usr/bin/env
 1 file changed, 1 insertion(+)
$ git push origin dev
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 349 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
   fc38031..291bea8  dev -> dev

你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送:

$ git add hello.py
$ git commit -m "add coding: utf-8"
[dev bd6ae48] add coding: utf-8
 1 file changed, 1 insertion(+)
$ git push origin dev
To [email protected]:michaelliao/learngit.git
 ! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to ‘[email protected]:michaelliao/learngit.git‘
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. ‘git pull‘)
hint: before pushing again.
hint: See the ‘Note about fast-forwards‘ in ‘git push --help‘ for details.

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

$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:michaelliao/learngit
   fc38031..291bea8  dev        -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream dev origin/<branch>

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

$ git branch --set-upstream dev origin/dev
Branch dev set up to track remote branch dev from origin.

再pull:

$ git pull
Auto-merging hello.py
CONFLICT (content): Merge conflict in hello.py
Automatic merge failed; fix conflicts and then commit the result.

这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push:

$ git commit -m "merge & fix hello.py"
[dev adca45d] merge & fix hello.py
$ git push origin dev
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 747 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
   291bea8..adca45d  dev -> dev

因此,多人协作的工作模式通常是这样:
    首先,可以试图用git push origin branch-name推送自己的修改;
    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    如果合并有冲突,则解决冲突,并在本地提交;
    没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果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,如果有冲突,要先处理冲突。
)

时间: 2024-12-11 07:01:35

Git教程之多人协作的相关文章

Git详细教程---多人协作开发

Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非常好的解决方案 ---- 多人协作开发. 1.多人协作原理 典型的做法是,首先创建一个git服务器,被多个人所操作. 1.多人协助实现 分为如下几个步骤: 1.创建一个git裸服务器 (git init --bare) 2.从裸服务器将版本库克隆至本地(git clone ) 3.本地常规操作 4.

[git]多人协作

git学习资料比较好的有廖雪峰的教程 还有2个动画教程: https://www.zhihu.com/question/38008771 ? git-scm ? 廖雪峰-Git教程 ? git-for-windows ? GitHub 添加 SSH keys ? gogithub ? git常规命令练习 ? git的资料整理 ? 我所记录的git命令(非常实用) ? 企业开发git工作流模式探索部分休整 ? GitHub 漫游指南 ? GitHub秘籍 ? 使用git和github进行协同开发流

GitHub多人协作简明教程

本文面向了解git的基本命令但是不熟悉如何使用GitHub进行多人协作开发项目的同学. 为简单起见,这里只设定有两个开发人员,HuanianLi 和 DaxiangLi.他们在GitHub上的地址为: HuanianLi: https://github.com/huanianli  # host  developer DaxiangLi: https://github.com/daxiangli  # guest developer HuanianLi将创建一个项目kaiba, 然后邀请Daxi

Git之Eclipece提交项目到Github并实现多人协作

一.Eclipece提交项目到Github 见  eclipse提交项目到github 二.利用github组织实现多人协作 1.新建组织: New organization 1.1.填表(1.组织名   2.邮箱   3.免费公开仓库   4.创建) 2.组织管理 2.1添加团队: 2.2.添加组织的仓库: 2.3.添加成员:(添加成员之后,需要在邮箱里确认) 3.多人协作 3.1团队成员都从eclipse中拉取组织中的仓库 GIT视图->clone,按步骤来,与 eclipse提交项目到gi

Git 多人协作开发

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且你的远程仓库的默认名称是origin 查看远程库的信息,用git remote [email protected] MINGW32 /c/gitskill (dev)$ git remoteorigin 或者,用git remote -v 查看更详细的信息: [email protected] MINGW32 /c/gitskill (dev)$ git remote -vorigin http

GIT 分支管理:多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git remote origin 或者,用git remote -v显示更详细的信息: $ git remote -v origin https://github.com/wangmingshun/studygit.git (fetch) origin https://github.com/wangming

git多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin 用git remote -v显示更详细的信息: $ git remote -v 上面显示了可以抓取和推送的origin的地址.如果没有推送权限,就看不到push的地址. 推送分支 推送分支,就是把该分支上的所有本地提交推送到远程库.推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上: git push origin master如果要

Git 多人协作的工作模式

多人协作 148次阅读 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git remote origin 或者,用git remote -v显示更详细的信息: $ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:micha

小蚂蚁学习git(4)——多人协作、推送分支、拉取分支、解决冲突

接上篇(http://my.oschina.net/woshixiaomayi/blog/521706)继续 八.多人协作 当从远程库克隆的时候,实际上Git自动的把本地的master分支和远程的master分支对应了起来,远程库的默认名称是origin. git remote    查看远程库的信息 git remote -v    查看远程库的详细信息 推送分支: 是把本分支上所有本地内容提交到远程库中,推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上,命令: g