git user guide

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 workspace
  git 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 workspace
  cd 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. 比较本地的仓库和远程参考的区别
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管理方式,基本可用,但肯定不是最好。

团队开发:AB

A在本地创建自己的分支:

git checkout -b a

git push origin a:a //提交到远程分支

B在本地创建自己的分支:

git checkout -b b

git pushorigin b:b //提交到远程分支

创建develop分支,此分支代码永远都是最新的,AB开发完成之后都可以mergedevelop分支

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

说到最后一句话:AB的分支只合并develop分支。不改变同一个模块的情况下是不会冲突的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值