博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Git 远程分支的pull与push
阅读量:6304 次
发布时间:2019-06-22

本文共 2566 字,大约阅读时间需要 8 分钟。

远程分支信息查看

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为upstreamgit config --global push.default upstream#orgit config push.default upstream#取消设置git config --unset push.default

解法二

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

git checkout -b 
 
/

注意:如果使用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
本文转自 sshpp 51CTO博客,原文链接:http://blog.51cto.com/12902932/1927040,如需转载请自行联系原作者
你可能感兴趣的文章
使用ArrayList时设置初始容量的重要性
查看>>
Java Web-----JSP与Servlet(一)
查看>>
Maven搭建SpringMVC+Mybatis项目详解
查看>>
关于量子理论:最初无意的简化,和一些人有意的强化和放大
查看>>
CentOS 6.9通过RPM安装EPEL源(http://dl.fedoraproject.org)
查看>>
“区块链”并没有什么特别之处
查看>>
没有功能需求设计文档?对不起,拒绝开发!
查看>>
4星|《先发影响力》:影响与反影响相关的有趣的心理学研究综述
查看>>
IE8调用window.open导出EXCEL文件题目
查看>>
python之 列表常用方法
查看>>
vue-cli脚手架的搭建
查看>>
在网页中加入百度搜索框实例代码
查看>>
在Flex中动态设置icon属性
查看>>
采集音频和摄像头视频并实时H264编码及AAC编码
查看>>
3星|《三联生活周刊》2017年39期:英国皇家助产士学会于2017年5月悄悄修改了政策,不再鼓励孕妇自然分娩了...
查看>>
linux查看命令是由哪个软件包提供的
查看>>
高级Linux工程师常用软件清单
查看>>
堆排序算法
查看>>
folders.cgi占用系统大量资源
查看>>
路由器ospf动态路由配置
查看>>