首先要明确一点,对 Git 的操作是围绕 3 个大的步骤来展开的(其实几乎所有的 SCM 都是这样)

  1. 从 git 取数据(git clone
  2. 改动代码
  3. 将改动传回 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 的一些认识的更多相关文章

  1. git 强制提交 & 覆盖 origin/master

    git 强制提交 & 覆盖 origin/master git 强制提交本地分支覆盖远程分支 # git push origin 分支名 --force # local $ git push ...

  2. 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提交代码报下面错,(我是用这种方法解 ...

  3. git: Your branch and 'origin/master' have diverged

    git: Your branch and 'origin/master' have diverged - how to throw away local commits? - Stack Overfl ...

  4. [小技巧] git: Your branch and 'origin/master' have diverged

    本文参考:http://stackoverflow.com/questions/19864934/git-your-branch-and-origin-master-have-diverged-how ...

  5. IDEA使用Git出现push to origin/master was rejected错误解决方案

    在IDEA中配置码云的URL,如下图 切换到自己项目所在的目录,右键选择GIT BASH Here 在terminl窗口中依次输入命令: git pull git pull origin master ...

  6. git分支简介,理解HEAD,master

    为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的. 或许你还记得 起步 的内容,Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照. 在进行提交操作时, ...

  7. git如何从远程非master分支更新到本地对应分支

    git如何从远程非master分支更新到本地对应分支 自己实例 正确步骤 如果本地有分支,那就删除本地分支 删除本地分支::git branch -d 2018_4_18_second 切换分支: g ...

  8. Git详解之三 Git分支

    相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/gi ...

  9. 理解git分支-远程分支

    远程分支 远程引用是对远程仓库的引用(指针),包括分支.标签等等. 你可以通过 git ls-remote (remote)来显式地获得远程引用的完整列表,或者通过 git remote show ( ...

随机推荐

  1. 纠正几个NANDFLASH很容易犯的错误【转】

    转自:https://blog.csdn.net/pengrui18/article/details/32337297 今天在看别人如何根据物理地址计算NANDFLASH的列地址(column add ...

  2. u_boot移植之内存基础知识DDR【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-4938411.html

  3. 006使用Grafana展示时间序列数据

    简介 Grafana是一个独立运行的系统,内置了Web服务器.它可以基于仪表盘的方式来展示.分析时间序列数据. Grafana支持多种数据源,例如:Graphite.OpenTSDB.InfluxDB ...

  4. 网络io模式(服务器请求应答模式)

    2014年1月19日 22:07:41 这几天看nginx 和 Apache的视频教程(马哥和邹老师)了解到了一些网络io模式(nginx的相关配置项为sendfile) 这里简单记录下来以备后用 A ...

  5. centos7 部署 open-falcon 0.2.0

    =============================================== 2019/4/29_第3次修改                       ccb_warlock 更新 ...

  6. VS2017插件开发-项目右键菜单

    1.创建自定义命令 2.更改.vsct中Group节点的id <Group guid="guidPublishOwinPackageCmdSet1" id="MyM ...

  7. 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 ...

  8. Maven 命令及其他备忘

    1.与eclipse中右键 Maven -> Update Project 对应的命令行命令: mvn clean install -e -U -e详细异常,-U强制更新

  9. centos 监控进程,并自动重启

    编辑Crontab crontab -e 按i进行编辑 */ * * * * /root/monitor.sh # 每分钟运行一遍monitor.sh脚本 * * * /sbin/reboot # 每 ...

  10. Git(二)使用git管理文件版本(TortoiseGit )

    一.创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都 ...