对 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 ( ...
 
随机推荐
- 纠正几个NANDFLASH很容易犯的错误【转】
			
转自:https://blog.csdn.net/pengrui18/article/details/32337297 今天在看别人如何根据物理地址计算NANDFLASH的列地址(column add ...
 - u_boot移植之内存基础知识DDR【转】
			
转自:http://blog.chinaunix.net/uid-25909619-id-4938411.html
 - 006使用Grafana展示时间序列数据
			
简介 Grafana是一个独立运行的系统,内置了Web服务器.它可以基于仪表盘的方式来展示.分析时间序列数据. Grafana支持多种数据源,例如:Graphite.OpenTSDB.InfluxDB ...
 - 网络io模式(服务器请求应答模式)
			
2014年1月19日 22:07:41 这几天看nginx 和 Apache的视频教程(马哥和邹老师)了解到了一些网络io模式(nginx的相关配置项为sendfile) 这里简单记录下来以备后用 A ...
 - centos7 部署 open-falcon 0.2.0
			
=============================================== 2019/4/29_第3次修改 ccb_warlock 更新 ...
 - VS2017插件开发-项目右键菜单
			
1.创建自定义命令 2.更改.vsct中Group节点的id <Group guid="guidPublishOwinPackageCmdSet1" id="MyM ...
 - Using MongoDB in C#
			
In order to use MongoDB in C#, you can import MongoDB C# Driver to your project. It's best to create ...
 - Maven 命令及其他备忘
			
1.与eclipse中右键 Maven -> Update Project 对应的命令行命令: mvn clean install -e -U -e详细异常,-U强制更新
 - centos 监控进程,并自动重启
			
编辑Crontab crontab -e 按i进行编辑 */ * * * * /root/monitor.sh # 每分钟运行一遍monitor.sh脚本 * * * /sbin/reboot # 每 ...
 - Git(二)使用git管理文件版本(TortoiseGit )
			
一.创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都 ...