总结:

add就是用来建立跟踪,添加文件到缓存区

commit就是把文件缓存区的文件正式加到本地库中;

push就是把本地库更新到远程库中;

git命令的操作要在仓库所在目录下进行才有效;

在Github上,可以任意fork开源仓库;

自己拥有fork后的仓库的读写权限;

可以推送pull request给官方仓库来贡献代码;

=====================================================

如果远程仓库做了修改,如何更新到本地?

查看远程分支:git remote -v

查看状态:git status

从远程获取最新版本到本地:

  1)在本地创建新temp分支的办法,将远程origin仓库的master分支代码下载到本地temp分支:git fetch origin master:temp;

  2)接第1步,也可以使用 git fetch origin master;

  3)使用命令:git diff temp;用来比较本地代码与刚从远程下载下来的代码的区别;

  4)合并temp分支到本地的master分支;git merge temp

  5)删除temp分支:git branch -d temp,如果该分支没有merge到本地,那么该分支就会报错,可以添加-d参数来强制删除;

====================================================

分支:

分支产生的背景和意义:

举个例子,准备开发一个新功能,需要两周时间,如果活还没干完,不完整的代码库会导致别人没法干活;如果一次性全部写完再一次提交,又存在丢失每天进度的风险;

现在有了分支,就不用怕了,先创建一个分支,别人看不到,还可以在原来分支上正常工作;而你再自己的分支上干活,想提交就提交;

当自己完成了开发,就可以一次性合并到原来的分支上,又安全又不影响别人工作;

分支的原理(参考廖雪峰的Git教程):

  每一次提交,Git都把他们串成一条时间线

  HEAD 指向当前分支;

  master 指向提交;master是主分支,每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线会越来越长;

  创建一个新的分支,例如dev,即增加了一个dev指针,修改HEAD的指向,指向dev。即完成分支的创建,工作区文件没有任何变化;

  在dev上的工作结束之后,就可以把dev和master合并,最简单的方法,直接把master指向dev的当前提交,就完成了合并,HEAD指向master;

  合并完分支后,甚至可以直接删除dev分支。删除分支dev就是把dev指针给删掉,这样就剩下了一条master分支;

冲突:

创建并切换一个分支feature1:git checkout -b feature1  (checkout是直接到工作区,当前分支是feature)

在feature1分支修改文件:add、commit;

合并分支feature1到master:git merge feature1;

如果有冲突解决冲突,冲突即要合并时,发现master也产生了提交,用git status检查冲突;

关于分支的命令总结:

创建并切换分支: git checkout -b <name>

创建分支:git branch <name>

切换分支:git checkout <name>

查看当前分支:git branch

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

在本地仓库中建立一个远程仓库的别名,以便之后提交代码时,不需要每次都输入远程仓库的地址:git remote add origin git@<git 仓库的地址>;

本地新分支更新到远程仓库中:git push origin <NewBranchName>

拉取远程分支到本地分支:git pull <远程主机名> <远程分支名>:<本地分支名>    例如:git pull origin master:wy  ->这条命令可以理解成git fetch+git merge;

如果改成:git pull origin master,省略了后面的冒号的话,表示将远程origin主机的master分支拉取过来和本地的当前分支合并;

这么看fetch更加安全,再merge之前,可以查看更新情况,然后再决定是否合并;

分支管理策略:

master分支应该是十分稳定的,仅用来发布新版本;

dev分支是不稳定的用来干活的;

多人合作时,每个人都再dev分支上干活,每个人都有自己的分支,是不是往dev分支上合并即可;

====================================================

标签:

标签的意义:

标签是版本库的一个快照;

例如:遇到需要上周一那个版本,版本号是V1.2,按照v1.2查找commit就行;如果查找commit号的话,一串乱七八糟的数字不好找;

tag是让人容易记住的有意义的名字,它跟某个commit绑定在一起;

标签是和具体一个commit挂钩的,如果这个commit既出现在master分支上,又出现再dev分支上,在这两个分支上都可以看到标签;

操作过程:

切换到需要打标签的分支上:git branch;git checkout <branchname>;

打标签:git tag <name>;

查看标签:git tag;

默认标签是打在最新commit上的。如果忘记打标签的话,找到历史提交的commit id,然后打上;

查看标签的信息:git show <tagename>;

如果标签打错了,可以删除:git tag -d v0.1

因为创建的标签只在本地,不会推送到远程,删除错误的标签比较容易;

如果要推送某个标签到远程,使用命令 git push origin <tagname>;

一次性推送全部尚未推送到远程的本地标签:git push origin --tags;

如果标签已经推送到远程,要删除远程标签的话,就麻烦一些,要先本地删除,再从远程删除,命令也是用push的方法;

Github概念理解备忘录的更多相关文章

  1. 大数据核心知识点:Hbase、Spark、Hive、MapReduce概念理解,特点及机制

    今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ...

  2. SpringIOC的概念理解、构造器注入、setter注入、p命名空间注入、IOC容器介绍与比较

    1.IOC概念理解 IOC(Inversion of Control)即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...

  3. Kubernetes重要概念理解

    Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernete ...

  4. SNF快速开发平台2019-角色、权限、账户的概念理解-非常全的理论讲解权限控制

    组织模型   资源模型  操作模型 谁能够执行哪些操作    执行资源的范围 资源概念资源就是想要的到的最终物质,我们可以给每一个资源定义一个权限,也可以给某一类资源定义一个权限 权限概念权限是对资源 ...

  5. elasticsearch基本概念理解+elasticsearch 的shards unassigned处理方法 -- 最佳运维实践 - 集群规划

    1.es与MySQL的概念对比 2.概念理解 2.1 Index : 一个索引即是文档的集合 2.2 Document : 一个文档即是一个可被索引的基础单元信息,一条记录: 2.3 Replicas ...

  6. fragment概念理解

    fragment概念理解知识,fragment概念理解图片 fragment概念理解内容,fragment概念理介绍,fragment概念理正文 Fragment是Android honeycomb ...

  7. ubuntn系统下将文件拷贝到优盘中及挂载概念理解

    参考资料:http://jingyan.baidu.com/article/7082dc1c76f178e40a89bdd3.html: http://bbs.csdn.net/topics/3801 ...

  8. Ceph 概念理解

    简介 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务. 在虚拟化领域里,比较常用到的是Ceph的块设备存储, ...

  9. RabbitMq基本概念理解

    RabbitMQ的基本概念 RabbitMQ github项目地址 RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的 消息中间件 ...

随机推荐

  1. JavaScript Math.floor() 方法

    定义和用法: floor() 方法可对一个数进行下舍入. 语法: Math.floor(x); x:必须参数,可以是任意数值或表达式: 返回值: 小于等于 x,且与 x 最接近的整数. 说明: flo ...

  2. [Linux] Big-endian and Little-endian (大小端模式)

    Big-endian Little-endian 大小端模式   https://en.wikipedia.org/wiki/Endianness 大端模式,是指数据的高字节保存在内存的低地址中,而数 ...

  3. UX设计案例研究:建立更好的用户体验(重新设计Air Peace Airline网站)

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 坐飞机旅行总是能给人带来很棒的体验,但我认为应该考虑预订航班时给用户带来的压力.在如今的数字世界,我 ...

  4. http://www.atool.org/keytype.php#0-tsina-1-53371-397232819ff9a47a7b7e80a40613cfe1

    http://www.atool.org/keytype.php#0-tsina-1-53371-397232819ff9a47a7b7e80a40613cfe1

  5. 一文读懂 超简单的spark structured stream 源码解读

    为了让大家理解structured stream的运行流程,我将根据一个代码例子,讲述structured stream的基本运行流程和原理. 下面是一段简单的代码: val spark = Spar ...

  6. HRBUST1212 乘积最大 2017-03-06 15:47 59人阅读 评论(0) 收藏

    乘积最大 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...

  7. XXX 不是当前用户的有效责任,请联系您的系统管理员

    EBS中,有时进入一些基于OA Framework 的Web页面时,会出现这种现象: XXX  不是当前用户的有效责任,请联系您的系统管理员 ( or: xxx is not a valid resp ...

  8. day14(带参装饰器,迭代器,生成器,枚举对象)

    一,复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 ...

  9. ASP.NET IIS 支持PUT、DELETE请求

    IIS 本身不支持PUT.DELETE请求,但可以通过一下方法修改进而达到目的 删除IIS安装的WebDav模块,选择你的项目,右边有个“模块”,双击它:找到WebDavModule,删除它(不推荐, ...

  10. iOS 界面布局

    1. auto layout http://www.devtalking.com/articles/adaptive-layout-for-iphone6-1/ http://blog.sina.co ...