对 Git 分支 master 和 origin/master 的一些认识
首先要明确一点,对 Git 的操作是围绕 3 个大的步骤来展开的(其实几乎所有的 SCM 都是这样)
- 从 git 取数据(
git clone) - 改动代码
- 将改动传回 git(
git push)
这 3 个步骤又涉及到两个 repository,一个是 remote repository,在远程服务器上,一个是 local repository,在自己工作区上。其中 1, 3 两个步骤涉及到 remote server/remote repository/remote branch,2 涉及到 local repository/local branch。git clone 会根据你指定的 remote server/repository/branch,拷贝一个副本到你本地,在 git push 之前,你对所有文件的改动都是在你自己本地的 local repository 来做的,你的改动 local branch 和 remote branch 是独立(并行)的。Gitk 显示的就是 local repository。
在 clone 完成之后,Git 会自动为你将此远程仓库命名为 origin(origin 只相当于一个别名,运行 git remote –v 或者查看 .git/config 可以看到 origin 的含义),并下载其中所有的数据,建立一个指向它的 master 分支的指针,我们用 (远程仓库名)/(分支名) 这样的形式表示远程分支,所以 origin/master 指向的是一个 remote branch(从那个 branch 我们 clone 数据到本地),但你无法在本地更改其数据。
同时,Git 会建立一个属于你自己的本地 master 分支,它指向的是你刚刚从 remote server 传到你本地的副本。随着你不断的改动文件,git add , git commit,master 的指向会自动移动,你也可以通过merge(fast forward)来移动 master 的指向。
查看所有分支:
$ git branch -a (to show all the branches git knows about) * master
remotes/origin/HEAD -> origin/master
remotes/origin/master
查看远程分支:
$ git branch -r (to show remote branches git knows about) origin/HEAD -> origin/master
origin/master
可以发现,master 就是 local branch,origin/master 是 remote branch(master is a branch in the local repository. remotes/origin/master is a branch named master on the remote named origin)。
$ git diff origin/master master
=> show me the changes between the remote master branch and my master branch
需要注意的是,remotes/origin/master 和 origin/master 的指向是相同的,可以运行以下命令看效果:
$ git diff origin/master remotes/origin/master
$ git push origin master
origin 指定了你要 push 到哪个 remote。
master 其实是一个“refspec”,正常的“refspec”的形式为“+<src>:<dst>”,冒号前表示 local branch 的名字,冒号后表示 remote repository 下 branch 的名字。注意,如果你省略了<dst>,git就认为你想 push 到 remote repository 下和 local branch 相同名字的 branch。听起来有点拗口,再解释下,push 是怎么个 push 法,就是把本地 branch 指向的 commit push 到 remote repository 下的 branch,比如:
$ git push origin master:master
=> 在 local repository 中找到名字为 master 的 branch,使用它去更新 remote repository 下名字为 master 的 branch,如果 remote repository 下不存在名字是 master 的 branch,那么新建一个。
$ git push origin master
=> 省略了<dst>,等价于“git push origin master:master”。
$ git push origin master:refs/for/mybranch
=> 在 local repository 中找到名字为 master 的 branch,用它去更新 remote repository 下面名字为 mybranch 的 branch。
$ git push origin HEAD:refs/for/mybranch
=> HEAD 指向当前工作的 branch,master 不一定指向当前工作的 branch,所以我觉得用 HEAD 还比 master 好些。
$ git push origin :mybranch
=> 在 origin repository 里面查找 mybranch,删除它。用一个空的去更新它,就相当于删除了。
对 Git 分支 master 和 origin/master 的一些认识的更多相关文章
- git 强制提交 & 覆盖 origin/master
git 强制提交 & 覆盖 origin/master git 强制提交本地分支覆盖远程分支 # git push origin 分支名 --force # local $ git push ...
- Push rejected: Push master to origin/master was rejected /failed to push some refs to /git did not exit cleanly
用studio提交代码报 Push rejected: Push master to origin/master was rejected 用TortiuseGit提交代码报下面错,(我是用这种方法解 ...
- git: Your branch and 'origin/master' have diverged
git: Your branch and 'origin/master' have diverged - how to throw away local commits? - Stack Overfl ...
- [小技巧] git: Your branch and 'origin/master' have diverged
本文参考:http://stackoverflow.com/questions/19864934/git-your-branch-and-origin-master-have-diverged-how ...
- IDEA使用Git出现push to origin/master was rejected错误解决方案
在IDEA中配置码云的URL,如下图 切换到自己项目所在的目录,右键选择GIT BASH Here 在terminl窗口中依次输入命令: git pull git pull origin master ...
- git分支简介,理解HEAD,master
为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的. 或许你还记得 起步 的内容,Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照. 在进行提交操作时, ...
- git如何从远程非master分支更新到本地对应分支
git如何从远程非master分支更新到本地对应分支 自己实例 正确步骤 如果本地有分支,那就删除本地分支 删除本地分支::git branch -d 2018_4_18_second 切换分支: g ...
- Git详解之三 Git分支
相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/gi ...
- 理解git分支-远程分支
远程分支 远程引用是对远程仓库的引用(指针),包括分支.标签等等. 你可以通过 git ls-remote (remote)来显式地获得远程引用的完整列表,或者通过 git remote show ( ...
随机推荐
- 第8月第16天 django pil
1. https://github.com/chaonet/forum/ sudo easy_install --find-links http://www.pythonware.com/produ ...
- Quartus II 安装教程—FPGA入门教程【钛白Logic】
Quartus II 工具安装一般分为两个部分,首先是开发工具本身的安装,其次就是器件库的安装,我们可以根据我们的需要选择相应的器件库来安装,这里我们使用Cyclone IV的FPGA,即安装Cycl ...
- 记一次ThreadPoolExecutor面试
ThreadPoolExecutor点滴 线程池应该也是面试绕不开的一个点,平时大家也没少用,但其实也有一些小Tips还是值得记录一下. Constructor public ThreadPoolEx ...
- QTP图片验证/图片比较/二进制流对比法
图片验证主要是文件对比,其中我们可以利用二进制的方法读取图片信息,然后进行对比,达到对比的效果,本例子利用fso对象的文件流的方法实现,代码如下: Public Function CompareFil ...
- 页面跳转时中间参数保存(memcache/cookie)
2014年1月19日 17:30:27 我这篇文章就说了一句话:用cookie保存页面间跳转时的参数 情景: 客服在后台操作的时候,经常从列表页进入到编辑页,编辑完信息后,还要自动返回之前的列表页 问 ...
- node.js开发web
1.安装express框架 使用npm install -g express安装express后,在命令行中执行express,提示没有此命令 原因是在新版的express中命令行需要单独安装 npm ...
- Ibatis.Net 动态SQL语句学习(六)
在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数吧. 一.条件查询 1.传递单个参数 如根据Id查询: <select id=&qu ...
- java Comparator和Comparable(比较器)
Comparable: 一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序,sort方法调用compareTo()方法里定义 ...
- Win10解决无法访问其他机器共享的问题
Win10解决无法访问其他机器共享的问题 你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问.这些策略可帮助保护你的电脑免受网络上不安全设备或恶意设备的威胁. 管理员身份执 ...
- JAVA 画图板实现(基本画图功能+界面UI)二、功能实现及重绘实现
上篇博客中介绍了界面的实现方法,在这篇博客中将对每个按钮的功能的实现进行讲解并介绍重绘 首先肯定要添加事件监听机制了,那么问题来了,事件源对象是谁?需要添加什么方法?事件接口是什么? 1.我们需要点击 ...