【Git零基础教程】(5)Remote

来源:互联网 发布:2017手机淘宝修改差评 编辑:程序博客网 时间:2024/05/16 18:03

当你不仅仅是在本地单人工作时,就需要使用git remote、push、pull等命令来实现多人协作。

当你使用clone命令从某个网络地址下载得到一个本地的git仓库:
git clone <url>
或者
git remote add <shortname> <url>
git pull <shortname>

网络仓库的结构和你的本地仓库结构分别如下图所示:
这里写图片描述

然后当你在本地做了一些修改,同时服务器上的内容经过别人的一些修改(并提交)后,两者的结构就会发生变化:
这里写图片描述

这时你如果用
git fetch origin
或者偷懒一点,可以省略origin,它是默认参数:
git fetch
来下载得到指定的remote上所有本地没有的commits,以及branches的位置,结构图变成下图所示:
这里写图片描述

这里origin是clone后自动生成的一个remote,它就指代的是clone的地址(上图中的 janedoe@git.ourcompany.com:project.git)。
origin/master表示origin上面的master分支的位置(可以理解为一个指针)

fetch下载的数据放在.git文件夹里,所以此时的工作目录不会有任何变化。你也无法通过git branch看到下载到的origin的各分支。不过你可以通过
git ls-remote origin
来查看origin上的各分支,然后使用
git checkout origin/<branch_name>
来切换到刚刚fetch到的某个remote分支

现在假设此时你又得知在另外的网址也建立了一个该库,你也想获得它,可以使用
git remote add <shortname> <url>
来新加一个remote,其中<shortname>是你自己为它随意命名的,这里假设取名为teamone。
然后用
git fetch teamone
来下载该仓库的各个分支。
完成后结构图如下,左上是原服务器仓库,右上是新加的服务器仓库:

这里写图片描述


git push

git push <remote> <branch>
如:
git push origin master
它的意思是用本地的master分支去更新origin服务器上的master分支。你也可以指定不同名称的<local_branch><remote_branch>
git push <remote> <local_branch>:<remote_branch>

之前的git push origin master等价于git push origin master:master


git pull

git pull
缺省情况下等于git pull origin
就等于先git fetch origin然后git merge <tracked_branch>
git fetch origin从origin下载得到所有本地没有的commits,以及所有origin上branches的位置信息。
git merge <tracked_branch>的意思是将当前branch 跟踪(track)的remote branch合并到当前branch,如果当前branch没有track的对象,必须显式指定出来:
git pull <remote> <branch>
它就相当于
git fetch
git merge /


Tracking Branches

上一节提到了跟踪(track),那么如何让本地的branch track相应的服务器分支呢。
一般如果你clone了一个工程,那么你的本地master分支默认已经track了origin/master。如果我们要新增一个track关系,分三种情况:

1. 本地有分支服务器没有分支

git push -u或--set-upstream <remote> HEAD或<branch_name>
如:git push -u origin test
上文中提到过,它等价于 git push -u origin test:test,也就是用本地的test分支去更新origin/test分支,同时让本地的test分支track origin/test(-u的效果)

2. 本地没有服务器有

git checkout -b <local_branch> <remote>/<remote_branch>
如:git checkout -b test origin/test
-b的意思是新建一个local_branch(不能和本地已有的重名),如果同时附上remote branch,就可以让它track该remote branch。这里<remote_branch><local_branch>不需要同名。

还有另一种写法:
git checkout --track <remote>/<remote_branch>
相当于
git checkout -b <remote_branch> <remote>/<remote_branch>

还有另一种更简单的写法:
git checkout <remote_branch>
相当于
git checkout -b <remote_branch> <remote>/<remote_branch>
该写法生效需满足:
1.本地不存在名为<remote_branch> 的分支(不然就直接checkout过去了)
2.只有一个remote拥有<remote_branch>

3. 本地有服务器也有

git branch <local_branch> -u或--set-upstream-to <remote>/<remote_branch>
如:git branch experiment -u origin/test
或:git branch -u origin/test
<local_branch> track <remote>/<remote_branch>
如果省略<local_branch>参数将使用当前所在的branch。
之后merge的时候将自动将<remote>/<branch>合并到当前branch


可以使用
git branch -vv
来查看本地branches的跟踪情况:
这里写图片描述

图中[ ]内就是track的对象,后面还会写出local branch与remote branch比较的结果。如ahead 3, behind 1就表示local branch有3个commits是remote branch所没有的,而remote branch有1个commit是local branch所有没有的,也就是存在着分叉。

建立了track关系后进行pull、merge就可以不用指定参数了。


  • 删除remote branches
    git push <remote> --delete <remote_branch>

    git push <remote> :<remote_branch>
    不会影响到本地的branches

  • 删除remotes
    git remote rm <remote>

其他git remote的常用命令:

  • -v
    并显示总体概要信息

  • show <remote_name>
    显示某一remote的详细信息,如:
    git remote show origin

  • rename <old_name> <new_name>

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 金立金刚手机开不开机怎么办 小米4手机拆机信号不好怎么办 荣耀自带游览器无法正常打开怎么办 苹果4s电池越来越不耐用怎么办 苹果4s电池不耐用了怎么办 苹果手机4s电池不耐用怎么办 红米4s电池不耐用怎么办 32位app私密相册打不开怎么办 红米手机取卡针断手机里了怎么办 我差评了客服打电话骂我怎么办 顺丰快递在预计时间没有回来怎么办 同款商品比京东便宜怎么办 京东自营不支持7天退货怎么办 天猫买了一个月的电动车坏了怎么办 发票号码和机打号码不一致怎么办 交电费的本子弄丢了怎么办 快递正在派件中发现地址错了怎么办 快递当天送达当天签收还算延怎么办 深圳国税公众号预约取号公司怎么办 社保买了停了2年怎么办 qq号被冻结申请不回来了怎么办 qq号被冻结 手机密保忘了怎么办 微信账号封了2天怎么办 买qq号被申诉找回了怎么办 收到了京东白条的催款通知单怎么办 成都买房社保不够两年怎么办18年 电话号码给人设置成骚扰电话怎么办 找不到领导电话不接短信不回怎么办 微信账号被别人手机号冻结了怎么办 微信冻结了手机号也让人换了怎么办 顺丰快递拒收退回丢件了怎么办 京东买东西快递电话没有听到怎么办 在京东购物自己电话号输错了怎么办 北京房子卖了户口没地方迁怎么办 微信弄丢了微信密码找不到了怎么办 微信背人用过找不到密码怎么办 超市的微信支付宝收付款怎么办 办理联华超市的会员储蓄卡怎么办 卡杰文具密码本如果忘记密码怎么办 火狐浏览器阻止要访问的网页怎么办 点我达被永久停用了怎么办