总结:

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. 全球数据库-->基金/管理产品-->基金分析/新闻/报告

    加拿大共同基金 澳大利亚投资信托 美国ETF 美国共同基金 英国投资信托基金 名称 分析师名称 分析日期 晨星分析师评级 晨星简报

  2. [Jenkins]怎样在Jenkins上面启动服务器上的批处理脚本

    New Item 在Build --> Execute Windows batch command --> 里面填写: schtasks /run /tn Start_Hub_szotqa ...

  3. JavaScript 语法总结

    1. 不能为基本类型变量添加属性和方法. 如果添加了,那么也是undefined的. var str = "a string"; str.attr = "attr&quo ...

  4. php利用mpdf生成pdf并保存到目录

    下载mpdf7.0两种方法 (1). github地址:https://github.com/mpdf/mpdf (2). composer require mpdf/mpdf <?php er ...

  5. RocketMQ broker jvm 监控

    1. jps 获取要监控broker jvm 的进程ID jsp 2. nohup 输出监控日志 nohup jstat -gc -t [pid] [interval] -t 会在每一条记录前加时间戳 ...

  6. (广搜)可口可乐 -- hdu -- 1495

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1495 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  7. HDU1875 畅通工程再续 2017-04-12 19:52 48人阅读 评论(0) 收藏

    畅通工程再续 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis ...

  8. delphi 10.1 berlin datasnap提交clientdataset.delta报:invalid variant type conversion(类型转换错误)问题的解决

    delphi 10.1 berlin datasnap提交clientdataset.delta报:invalid variant type conversion(类型转换错误)问题的解决,需要打这个 ...

  9. winform 开发中 把耗时操作 封装起来 异步执行(.net 4.0)

    .先定义一个 BackgroundTask.cs 代码如下: public class BackgroundTask { private static WaitDialogForm LoadingDl ...

  10. CentOS 7上搭建Docker环境

    一.Docker介绍和安装 http://linux.cn/article-4340-1.html Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机 ...