Git使用与心得体会

一.闲聊

闲暇时间学一下Git,也算是不用在网页端操作github了

二.Git相关

集中式与分布式


Git是一个分布式的版本控制系统,而传统的SVN则属于集中式

集中式与分布式的区别:

  • 集中式版本控制中心只有中心服务器有一份代码,而分布式则是每个人的电脑上都有一份完整的代码

  • 集中式版本控制中心存在显而易见的安全性问题,当中心服务器挂掉后,所有人都无法正常工作了

  • 集中式版本控制需要联网才能工作,因为你需要和中心服务器进行交互,如果你的网络状况不佳,那么使用体验会令用户无法忍受,而分布式管理控制则无需联网即可进行

  • 分布式版本控制新建、合并分支的操作速度十分迅速,而集中式版本控制新建一个分支就相当于复制了一份完整的代码

中心服务器


中心服务器可以用来交换每个用户的修改,虽然实际上没有中心服务器我们也可以工作,但中心服务器能够保证24小时持续开机,更加方便用户的交换修改。

Github、Gitee就是中心服务器

工作流


当我们执行mkdir之后,我们所新建的directory就成为了一个工作区,工作区的目录内还有一个隐藏目录.git,它存储的是git的版本库。

  • git add 把文件修改添加到缓存区
  • git commit 把缓存区的修改提交到当前分支,提交后缓存区就会被清空
  • git reset -- 使用当前分支上的修改覆盖缓存区,工作流是由History到Stage的,即我们撤销了最新一次的git add操作
  • git checkout -- 将缓存区的修改覆盖工作区,即我们撤销了最新一次的本地修改

我们也可以跳过暂存区域直接从分支中取出修改,或者直接提交修改到分支中。

  • git commit -a 直接把所有文件的修改添加到暂存区然后执行提交
  • git checkout HEAD -- files 取出最后一次修改,可以用来进行回滚操作

分支实现


Git使用指针将每个提交连接成一条时间线,而Head指针则指向当前分支

新建分支时,我们新建一个指针指向时间线的最后一个节点,并让Head指向新的分支

我们的每次提交只会让当前分支指针向前移动,而其他分支指针则不会移动

合并分支通过改变指针即可

冲突


当两个分支都对同一个文件的同一行进行了修改,在分支合并时就会产生冲突

Git 会使用 <<<<<<< ,======= ,>>>>>>> 标记出不同分支的内容,只需要把不同分支中冲突部分修改成一样就能解决冲突。

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

Fast forward


快进式合并,会直接将master分支指向合并的分支,但这样会导致丢失分支信息

我们可以在执行git merge操作时加上--no-ff参数来禁用此模式,并加上一个-m让合并时产生一个新的commit

$ git merge --no-ff -m "merge with no-ff" dev

储藏(Stashing)


在一个分支上操作之后,如果我们还没有提交,那么我们切换分支,在另一个分支上也能看到新的修改。原因是因为所有分支共用一个工作区。

但我们可以使用git stash命令将当前分支的修改储藏起来,此时工作区的所有修改会被存入到栈中,也就是说工作区处于一个没有任何未提交修改的状态。这时就可以切换到别分支了。

$ git stash
Saved working directory and index state \ "WIP on master: 049d078 added the index file"
HEAD is now at 049d078 added the index file (To restore them type "git stash apply")

该功能可以用于 bug 分支的实现。如果当前正在 dev 分支上进行开发,但是此时 master 上有个 bug 需要修复,但是 dev 分支上的开发还未完成,不想立即提交。在新建 bug 分支并切换到 bug 分支之前就需要使用 git stash 将 dev 分支的未提交修改储藏起来。

个人感觉有点像Win的睡眠和休眠?

SSH传输设置


Git 仓库和 Github 中心仓库之间的传输是通过 SSH 加密的。

如何配置Github的SSH密钥网上很多,不赘述了。

.gitignore文件


忽略以下文件:

  • 操作系统自动生成的文件,比如缩略图;
  • 编译生成的中间文件,比如 Java 编译产生的 .class 文件;
  • 自己的敏感信息,比如存放口令的配置文件。

Git基本操作


三.Tips

Git中可以使用gitk这个命令来打开图形化的管理界面,虽然现在很多IDE集成了强大的Git功能或者专门有Git软件就是了……

Git使用与心得体会的更多相关文章

  1. Git的基本使用方法和安装&心得体会

    1. git的安装和github的注册.代码托管.创建organization.邀请member. (1)git的安装 因为我电脑是windows系统,所以下载的是git for windows.在官 ...

  2. 关于Solr的使用总结的心得体会

    摘要:在项目中使用Solr作为搜索引擎对大数据量创建索引,提供服务,本文是作者对Solr的使用总结的一点心得体会, 具体包括使用DataImportHandler从数据库中近实时同步数据.测试Solr ...

  3. 加快FineReport报表设计的几个心得体会

    加快FineReport报表设计的几个心得体会 一.从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度.否则每次设计时模板均要从远程读取数据,速度相当慢 ...

  4. 十天来学习java的心得体会

    有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...

  5. "琳琅满屋"调查问卷 心得体会及结果分析

    ·关于心得体会       当时小组提出这个校园二手交易市场的时候,就确定了对象范围,仅仅是面向在校大学生,而且在我们之前就已经有了很多成功的商品交易的例子可以让我们去借鉴,再加上我们或多或少的有过网 ...

  6. 关于多本小说站的SEO—从”易读中文网”获得的心得体会

    从目前国内的网站流量来说,电影站,小说站,游戏站等的流量占总流量的比例还是很高的,许多站长把目光投入到了这几个方面,本文就着重来说对于小说站,尤其是多本小说站的SEO心得体会! 对于小说站来说,只要排 ...

  7. AngularJS心得体会

    AngularJS早些时候有过了解,知道这是一个JS的MVC框架,同类型的框架还有Backbone等.这次是由于项目需要,学习了两天的Angular后开始着手改之前的项目代码,这里大概说一下这一周学习 ...

  8. 关于Dropdownlist使用的心得体会

    2013-07-23关于Dropdownlist使用的心得体会: Dropdownlist使用最多的几个属性: 一.Dropdownlist.Items,负责包含所有选项的容器 DropDownLis ...

  9. xp硬盘安装Fedora14 过程记录及心得体会(fedora14 live版本680M 和fedora14 DVD版本3.2G的选择)

    这次电脑奔溃了,奇怪的是直接ghost覆盖c盘竟然不中.之前电脑上硬盘安装的fedora14操作系统,也是双系统.不知道是不是这个问题,记得同学说过,在硬盘装fedora之后,要手动修改c盘隐藏的那个 ...

随机推荐

  1. 迷宫类dp整合

    这是迷宫类dp我自己取的名字,通常比较简单,上货 简单模型 数字三角形 状态表示:f[i][j]表示起点第\(i\)行第\(j\)个数最短路径的长度 状态转移:\(f[i][j] = max(f[i ...

  2. 类型转换_str()函数与int()函数

    数据类型转换 需要将不同数据类型拼接在一起的时候就需要先进行数据类型转换 str+str//这里的+叫做连接字符,有点类似C++中的操作符重载,老对象里面的内容了 在python中整型和字符串类型不能 ...

  3. 意向不到的Dubug妙招

    1.直接dubug到想要到达的位置,直接点击旁边的数字即可. 2.debug后不想重新启动,想重新进入再执行一次debug,可以使用drop frame来删除当前栈,跳到之前的栈再一次进入这个栈. 注 ...

  4. 从零开始Blazor Server(7)--使用Furion权限验证

    序 上面两篇我们讲了怎么用OnNavigateAsync来验证权限,又写了怎么用策略来验证权限. 其实我们既然集成了Fution,就可以用Furion带的方式来验证. 创建AdminHandler 我 ...

  5. MyBatis-知识点详解

    Mybatis 中$与#的区别 1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的 ...

  6. Flutter-填平菜鸟和高手之间的沟壑

    Flutter-填平菜鸟和高手之间的沟壑 准备写作中... 1.Flutter-skia-影像,Flutter skia-图形渲染层.应用渲染层2.方法通道使用示例,用于演示如何使用方法通道实现与原生 ...

  7. 开源深度思考 - In Community We Trust

    作者 | 黄东旭,PingCAP 联合创始人&CTO 出品 | CSDN(ID:CSDNnews) 业界一直流传着黄东旭的传说:小学三年级开始写代码,四五年级学习C语言,初中毕业时,已经能够用 ...

  8. 【MySQL】从入门到精通8-SQL数据库编程

    上期:[MySQL]从入门到精通7-设计多对多数据库 第零章:Mac用户看这里: mac终端写MySQL和windows基本相同,除了配置环境变量和启动有些许不同以外. 先配置环境变量,在终端输入vi ...

  9. IDEA整合Docker

    创建项目 1.使用 IDEA 构建一个 SpringBoot 项目 2.编写一个helloController @RestController public class HelloController ...

  10. 第四章 部署K8s前准备工作

    一.主机准备 1.硬件 准备5台2C/2g/50g虚拟机: Centos7.6系统 2.集群规划 使用10.4.7.0/24网络 IP 主机名 10.4.7.11 hdss7-11.host.com ...