cooperate pull request:
http://www.cnblogs.com/rubylouvre/archive/2013/01/24/2874694.html
Git pull
从服务器的仓库中获取代码,和本地代码合并。(与服务器交互,从服务器上下载最新代码,等同于: Git fetch + Gitmerge)
从其它的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:“git pull origin master ”就是将origin这个版本库的代码更新到本地的master主分支。
Git fetch
从服务器的仓库中下载代码。(与服务器交互,从服务器上下载最新代码)
相当于从远程获取最新版本到本地,不会自动merge,比Git pull更安全些。
使用此方法来获取服务器上的更新。
$ git fetch <远程主机名> <分支名>
比如,取回origin主机的master分支。
$ git fetch origin master
所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用origin/master读取
Git clone
取出服务器的仓库的代码到本地建立的目录中(与服务器交互)
通过git clone获取远端git库后,.git/config中的开发者信息不会被一起clone过来。仍然需要为本地库的.git/config文件添加开发者信息。此外,开发者还需要自己添加 . gitignore文件。
通过git clone获取的远端git库,只包含了远端git库的当前工作分支。如果想获取其它分支信息,需要使用 “git branch –r” 来查看, 如果需要将远程的其它分支代码也获取过来,可以使用命令 “ git checkout -b 本地分支名 远程分支名”,其中,远程分支名为 “git branch –r” 所列出的分支名, 一般是诸如“origin/分支名”的样子。如果本地分支名已经存在, 则不需要“-b”参数。
Git push
将本地commit的代码更新到远程版本库中,例如 “git push origin”就会将本地的代码更新到名为orgin的远程版本库中。
git push和git pull正好想反,是将本地某个分支的内容提交到远端某个分支上。用法: git push username@ipaddr : 远端repository名 本地分支名:远端分支名。这条命令将本地git库的一个本地分支push到远端git库的远端分支名中。
需要格外注意的是,git push好像不会自动合并文件。因此,如果git push时,发生了冲突,就会被后push的文件内容强行覆盖,而且没有什么提示。 这在合作开发时是很危险的事情。
- .git/refs/head/[本地分支]
- .git/refs/remotes/[正在跟踪的分支]
-
$ git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git remote命令列出所有远程主机。
$ git remote
origin
使用-v选项,可以参看远程主机的网址。
$ git remote -v
orgin git@github.com:dragonwarrior01/MP3Server.git (fetch)
orgin git@github.com:dragonwarrior01/MP3Server.git (push)
$git remote add <主机名> <网址>
$git remote add orgin git@github.com:dragonwarrior01/MP3Server.git
$git remote rm命令用于删除远程主机。
单人控制例子:
2. 将PC-1上现有的workspace进行git管理并上传到服务器端:
cd workspacegit init
git add *
git commit -m 'initial commit'
git remote add origin ssh://huzhenwei@192.168.1.2/home/huzhenwei/repos.git #192.168.1.2为服务器的VPN内网IP
git push origin master #将本地的代码上传到服务器端
3. 从服务器端检出版本库到PC-2,在PC-2上新建文件并上传到服务器端:
git clone ssh://huzhenwei@192.168.1.2/home/huzhenwei/repos.git workspacecd workspace
touch newfile #创建一个新文件来做测试
git add newfile
git commit -m 'add newfile'
git push origin master #将本地的代码上传到服务器端
4. 在PC-1上获取PC-2更新的内容:
git pull origin master #将服务器端的代码下载到本地
方式一
1. 查看远程仓库
1 2 3 4 5 6 |
$ git remote -v
eoecn https://github.com/eoecn/android-app.git (fetch)
eoecn https://github.com/eoecn/android-app.git (push)
origin https://github.com/com360/android-app.git (fetch)
origin https://github.com/com360/android-app.git (push)
su@SUCHANGLI /e/eoe_client/android-app (master)
|
从上面的结果可以看出,远程仓库有两个,一个是eoecn,一个是origin
2 ,从远程获取最新版本到本地
1 2 3 4 |
$ git fetch origin master
From https://github.com/com360/android-app
* branch master -> FETCH_HEAD
su@SUCHANGLI /e/eoe_client/android-app (master)
|
$ git fetch origin master 这句的意思是:从远程的origin仓库的master分支下载代码到本地的origin master
3. 比较本地的仓库和远程参考的区别
1 2 |
$ git log -p master.. origin/master
su@SUCHANGLI /e/eoe_client/android-app (master)
|
因为我的本地仓库和远程仓库代码相同所以没有其他任何信息
4. 把远程下载下来的代码合并到本地仓库,远程的和本地的合并
1 2 3 |
$ git merge origin/master
Already up-to-date.
su@SUCHANGLI /e/eoe_client/android-app (master)
|
我的本地参考代码和远程代码相同,所以是Already up-to-date
以上的方式有点不好理解,大家可以使用下面的方式,并且很安全
方式二
1.查看远程分支,和上面的第一步相同
2. 从远程获取最新版本到本地
1 2 3 4 |
$ git fetch origin master:temp
From https://github.com/com360/android-app
* [new branch] master -> temp
su@SUCHANGLI /e/eoe_client/android-app (master)
|
git fetch origin master:temp 这句命令的意思是:从远程的origin仓库的master分支下载到本地并新建一个分支temp
- 比较本地的仓库和远程参考的区别
1 2 |
$ git diff temp
su@SUCHANGLI /e/eoe_client/android-app (master)
|
命令的意思是:比较master分支和temp分支的不同
由于我的没有区别就没有显示其他信息
4. 合并temp分支到master分支
1 2 3 |
$ git merge temp
Already up-to-date.
su@SUCHANGLI /e/eoe_client/android-app (master)
|
由于没有区别,所以显示Already up-to-date.
合并的时候可能会出现冲突,有时间了再把如何处理冲突写一篇博客补充上。
5.如果不想要temp分支了,可以删除此分支
1 2 3 |
$ git branch -d temp
Deleted branch temp (was d6d48cc).
su@SUCHANGLI /e/eoe_client/android-app (master)
|
如果该分支没有合并到主分支会报错,可以用以下命令强制删除git branch -D <分支名>
总结:方式二更好理解,更安全,对于pull也可以更新代码到本地,相当于fetch+merge,多人写作的话不够安全。
如有错误请指正
理论基础
http://ld.mmyz.net/progit/03-git-branching/
用法:
http://blog.csdn.net/luckyyulin/article/details/21095289
多人设计
下面给你介绍下我们的git管理方式,基本可用,但肯定不是最好。
团队开发:A、B
A在本地创建自己的分支:
git checkout -b a
git push origin a:a //提交到远程分支
B在本地创建自己的分支:
git checkout -b b
git pushorigin b:b //提交到远程分支
创建develop分支,此分支代码永远都是最新的,A和B开发完成之后都可以merge到develop分支
git checkout -b develop
git pushorigin develop:develop //提交到远程分支
创建release分支,此分支用于代码审核与发布版本.(不严格的话可以不要)
现在解决你的问题:
A修改了本地代码之后:
git add .
git commit -am "fix account bug"
git checkout develop //切换到develop分支
git pull origin develop //拉取develop分支最新代码
git merge A //合并自己开发分支
git push origin develop //提交到远程分支
-----------------------------------
此时B也修改了代码
git add .
git commit-am "fix order bug"
gitcheckout develop
git pullorigin develop
git mergeB
git pushorigin develop
说到最后一句话:A和B的分支只合并develop分支。不改变同一个模块的情况下是不会冲突的。