Git 远程分支的pull与push

远程分支信息查看

git branch -r #查看远程分支
git branch -a #查看所有分支,本地和远程 git remote show [remote-name] #查看远程仓库信息

其中git remote show [remote-name]展示的信息包括:

  • 会列出远程仓库的 URL 与跟踪分支的信息
  • 列出了当你在特定的分支上执行 git push 会自动地推送到哪一个远程分支
  • 列出了哪些远程分支不在你的本地
  • 哪些远程分支已经从服务器上移除了
  • 执行 git pull 时哪些分支会自动合并
  • ……

检出远程非master分支到本地

git checkout -b local origin/daily/dev

上面的方法可以直接检出远程分支到本地,在本地新建local分支,并切换到local分支上,注意本地分支和远程分支不同名。

这个方法会自动创建远程分支 /daily/dev 和本地分支local的跟踪关系, 通过git remote show origin可以看到包含如下信息:

 Local branches configured for 'git pull':
local merges with remote /daily/dev
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)

其中Local branches configured for 'git pull':下的就是upstream跟踪分支。

可以看出,远程分支 /daily/dev 和本地分支local 建立了git pull的关系,但是没有建立git push的关系。此时如果强行push,不会成功,会出现如下提示:

fatal: The current branch new has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin develop

Git默认push设置

我们知道通过git clone git@gitlab.xxx.com:xxxxx.git可以建立默认的本地master分支和远程master分支的pull和push的关系,但是我们无法通过clone命令检出非master分支,那么对于非master分支怎么办呢?

Git中push.default可以指定在没有明确指定远程分支的情况下,默认push的远程分支,其取值可以是:

  • nothing - push操作无效,除非显式指定远程分支(想让push变得简单的就不要用这个)
  • current - push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支(central 和 non-central workflows都适用)
  • upstream - push当前分支到它的upstream分支上(通常用于central workflow)
  • simple - simple和upstream是相似的(通常用于central workflow),只有一点不同,simple必须保证本地分支和它的远程 upstream分支同名,否则会拒绝push操作
  • matching - push所有本地和远程两端都存在的同名分支

central / non-central workflows 是Git的两种常见工作流场景:

  • central workflows - 集中式工作流,一个分支的push和pull都是同一个远程仓库
  • non-central workflows - 非集中式工作流,一个分支的push和pull可能分别都有不同的远程仓库

在Git 2.0之前,push.default的内建值被设为'matching',2.0之后则被更改为了'simple'。

在了解push.default之后,我们有如下几种比较好的从远程分支检出本地分支的方法(基于V2.0+):

解法一

所以如果你只有一个远程仓库,且你想检出的分支名称和远程分支不同名(有些管理工具会自动生成比较丑的远程分支名,类似:/features/2017-03-31-featuresA-1),那么你可以通过设置push.default 默认推送到pull的远程分支(upstream 分支):

#检出重命名
git checkout -b dev origin/features/2017-03-31-featuresA-1
#设置push.default为upstream
git config --global push.default upstream
#or
git config push.default upstream
#取消设置
git config --unset push.default

解法二

如果不想通过修改upstream,那么只能通过设置检出本地分支名称和远程分支名称相同:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

注意:如果使用git checkout -b features/feature_1 origin/features/feature_1检出,那么远程分支名称是features/feature_1,而不是origin/features/feature_1

解法三

这个也不算什么解法,但是强烈推荐,就是建立远程分支的时候,取个好点的名字。

git clone git@gitlab.xxx.com:xxxxx.git
#从master建立新分支
git checkout -b dev
#push并建立同名远程分支
git push origin dev

参考

Git push与pull的默认行为

Git config

Git 远程分支的pull与push的更多相关文章

  1. git 远程分支创建与推送

    git 远程分支创建与推送   原文地址:http://hi.baidu.com/lingzhixu/blog/item/4a9b830bb08a329fe850cd5b.html 本地分支的创建 本 ...

  2. git 远程分支回滚

    git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id [本地代码库回滚]: git reset --hard commit-id :回滚到commit-id,讲commit-id ...

  3. git远程分支创建,本地分支关联远程分支,第一次发布、更新分支

    git远程分支创建,本地分支关联远程分支,第一次发布.更新分支 github托管服务器地址为https://github.com git提交更新代码示意图: 本地与远程进行免密码配置(本地与远程关联) ...

  4. git 远程分支和tag标签的操作

    git远程分支操作:1.创建远程分支git push --set-upstream origin develop:develop2在服务器创建远程分支devlop2,让本地的develop分支和dev ...

  5. git远程分支--remote

    查看所有远程引用: $ git ls-remote From ssh://someone@example/testgit ebf3ef7551603cd57a699e80db0bfab36d1aa7b ...

  6. git - 远程分支

    对于用户来说,git给人提交到本地的机会.我们可以在自己的机器上创建不同的branch,来测试和存放不同的代码. 对于代码管理员而言,git有许多优良的特性.管理着不同的分支,同一套源代码可以出不一样 ...

  7. 关于git远程分支操作

    对于用户来说,git给人提交到本地的机会.我们可以在自己的机器上创建不同的branch,来测试和存放不同的代码. 对于代码管理员而言,git有许多优良的特性.管理着不同的分支,同一套源代码可以出不一样 ...

  8. Git远程分支和refs文件具体解释

    推送远程分支到同一个server 比方首先建立gitserver,顺便clone出两个副本 mkdir server cd server git init --bare cd .. git clone ...

  9. Git 远程分支常用操作

    # 查看远程仓库推拉地址,分支信息,分支跟踪情况等 git remote show origin # 拉取远程仓库的变更内容到本地 git fetch origin # 拉取并合并仓库的变更内容到本地 ...

随机推荐

  1. HashSet、LinkedHashSet、TreeSet使用区别

    HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放: LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代: Tree ...

  2. [NOI2007]货币兑换Cash(DP+动态凸包)

    第一次打动态凸包维护dp,感觉学到了超级多的东西. 首先,set是如此的好用!!!可以通过控制一个flag来实现两种查询,维护凸包和查找斜率k 不过就是重载运算符和一些细节方面有些恶心,90行解决 后 ...

  3. BZOJ 1062: [NOI2008]糖果雨(二维树状数组)

    首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...

  4. webstorm 编辑器破解 (麻麻再也不用担心过期了)

    先去官网下载webstorm2016.1.3版本(目前只知道2016.1这个版本可以永久破解,不会过期) 再下载webstorm2016.1的破解补丁 将下载好的破解补丁解压,会有一个Jetbrain ...

  5. SVN服务搭建

    yum方式搭建: 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion 2,创 ...

  6. 写好你的JavaScript

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 在实际工作中,我们应该经常会看到一些功能上没有问题,但编码风格和规范却十分糟糕的代码,这往往会让人不 ...

  7. 301、404、200、304、500HTTP状态

    一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务器超时 下面提供 HTTP 状态码的完整列表.点击链接可了解详情.您也可以访问 HTTP 状态码上的 ...

  8. iOS 图片裁剪 + 旋转

    iOS 图片裁剪 + 旋转 之前分别介绍了图片裁剪和图片旋转方法 <iOS 图片裁剪方法> 地址:http://www.cnblogs.com/silence-cnblogs/p/6490 ...

  9. 【js】性能问题

    执行环境和作用域 一.全局变量和局部变量 每个执行环境都有与之关联的变量对象(变量和函数存储在这里),全局执行环境是最外围的执行环境,根据ECMA实现所在的宿主不同,表示的执行环境的对象也不同.在we ...

  10. wemall app中基于Java获取和保存图片的代码

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.分享其中关于 保存正在下载的图片URL集合和图片三种获 ...