Github概念理解备忘录
总结:
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概念理解备忘录的更多相关文章
- 大数据核心知识点:Hbase、Spark、Hive、MapReduce概念理解,特点及机制
今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ...
- SpringIOC的概念理解、构造器注入、setter注入、p命名空间注入、IOC容器介绍与比较
1.IOC概念理解 IOC(Inversion of Control)即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...
- Kubernetes重要概念理解
Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernete ...
- SNF快速开发平台2019-角色、权限、账户的概念理解-非常全的理论讲解权限控制
组织模型 资源模型 操作模型 谁能够执行哪些操作 执行资源的范围 资源概念资源就是想要的到的最终物质,我们可以给每一个资源定义一个权限,也可以给某一类资源定义一个权限 权限概念权限是对资源 ...
- elasticsearch基本概念理解+elasticsearch 的shards unassigned处理方法 -- 最佳运维实践 - 集群规划
1.es与MySQL的概念对比 2.概念理解 2.1 Index : 一个索引即是文档的集合 2.2 Document : 一个文档即是一个可被索引的基础单元信息,一条记录: 2.3 Replicas ...
- fragment概念理解
fragment概念理解知识,fragment概念理解图片 fragment概念理解内容,fragment概念理介绍,fragment概念理正文 Fragment是Android honeycomb ...
- ubuntn系统下将文件拷贝到优盘中及挂载概念理解
参考资料:http://jingyan.baidu.com/article/7082dc1c76f178e40a89bdd3.html: http://bbs.csdn.net/topics/3801 ...
- Ceph 概念理解
简介 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务. 在虚拟化领域里,比较常用到的是Ceph的块设备存储, ...
- RabbitMq基本概念理解
RabbitMQ的基本概念 RabbitMQ github项目地址 RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的 消息中间件 ...
随机推荐
- 全球数据库-->基金/管理产品-->基金分析/新闻/报告
加拿大共同基金 澳大利亚投资信托 美国ETF 美国共同基金 英国投资信托基金 名称 分析师名称 分析日期 晨星分析师评级 晨星简报
- [Jenkins]怎样在Jenkins上面启动服务器上的批处理脚本
New Item 在Build --> Execute Windows batch command --> 里面填写: schtasks /run /tn Start_Hub_szotqa ...
- JavaScript 语法总结
1. 不能为基本类型变量添加属性和方法. 如果添加了,那么也是undefined的. var str = "a string"; str.attr = "attr&quo ...
- php利用mpdf生成pdf并保存到目录
下载mpdf7.0两种方法 (1). github地址:https://github.com/mpdf/mpdf (2). composer require mpdf/mpdf <?php er ...
- RocketMQ broker jvm 监控
1. jps 获取要监控broker jvm 的进程ID jsp 2. nohup 输出监控日志 nohup jstat -gc -t [pid] [interval] -t 会在每一条记录前加时间戳 ...
- (广搜)可口可乐 -- hdu -- 1495
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1495 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- HDU1875 畅通工程再续 2017-04-12 19:52 48人阅读 评论(0) 收藏
畅通工程再续 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- delphi 10.1 berlin datasnap提交clientdataset.delta报:invalid variant type conversion(类型转换错误)问题的解决
delphi 10.1 berlin datasnap提交clientdataset.delta报:invalid variant type conversion(类型转换错误)问题的解决,需要打这个 ...
- winform 开发中 把耗时操作 封装起来 异步执行(.net 4.0)
.先定义一个 BackgroundTask.cs 代码如下: public class BackgroundTask { private static WaitDialogForm LoadingDl ...
- CentOS 7上搭建Docker环境
一.Docker介绍和安装 http://linux.cn/article-4340-1.html Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机 ...