Git 远程分支的pull与push
来源:互联网 发布:观念 知乎 编辑:程序博客网 时间:2024/05/24 07:35
远程分支信息查看
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 <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 远程分支的pull与push
- git 关于分支,关于远程分支,关于push pull 的时机
- git 关于分支,关于远程分支,关于push pull 的时机
- git的操作(拉代码到本地/commit到本地/pull/push到远程/新建分支/合并分支/)
- 设置git push和pull的默认分支
- Git push与pull的默认行为
- Git push与pull的默认行为
- Git push与pull的默认行为
- 关于git的pull与push
- Git push与pull的默认行为
- Git push与pull的默认行为
- Git push与pull的默认行为
- git pull 与 git push
- git远程分支的管理和git push错误汇总
- 用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge
- git pull 时自动删除远程已经不在的分支
- 【git】git基本命令-项目的pull与push
- git push & git pull 推送/拉取分支
- MapReduce和Hive支持递归子目录作为输入
- Android 监听短信(同时监听广播和数据库)
- csu----超市购物
- RTMP、RTSP、HTTP视频协议直播流地址
- 按钮点击事件和在活动中使用Toast
- Git 远程分支的pull与push
- Linux(三)文件
- 关于kotlin的简单介绍
- ibatis
- underscore.js如何实现全局变量和链式调用
- 关于有时候GridView的OnItemClickListener点击失效问题
- JSON.parse()与eval()函数的区别
- 离散题目18
- Kotlin学习资源