Git使用与心得体会
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使用与心得体会的更多相关文章
- Git的基本使用方法和安装&心得体会
1. git的安装和github的注册.代码托管.创建organization.邀请member. (1)git的安装 因为我电脑是windows系统,所以下载的是git for windows.在官 ...
- 关于Solr的使用总结的心得体会
摘要:在项目中使用Solr作为搜索引擎对大数据量创建索引,提供服务,本文是作者对Solr的使用总结的一点心得体会, 具体包括使用DataImportHandler从数据库中近实时同步数据.测试Solr ...
- 加快FineReport报表设计的几个心得体会
加快FineReport报表设计的几个心得体会 一.从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度.否则每次设计时模板均要从远程读取数据,速度相当慢 ...
- 十天来学习java的心得体会
有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...
- "琳琅满屋"调查问卷 心得体会及结果分析
·关于心得体会 当时小组提出这个校园二手交易市场的时候,就确定了对象范围,仅仅是面向在校大学生,而且在我们之前就已经有了很多成功的商品交易的例子可以让我们去借鉴,再加上我们或多或少的有过网 ...
- 关于多本小说站的SEO—从”易读中文网”获得的心得体会
从目前国内的网站流量来说,电影站,小说站,游戏站等的流量占总流量的比例还是很高的,许多站长把目光投入到了这几个方面,本文就着重来说对于小说站,尤其是多本小说站的SEO心得体会! 对于小说站来说,只要排 ...
- AngularJS心得体会
AngularJS早些时候有过了解,知道这是一个JS的MVC框架,同类型的框架还有Backbone等.这次是由于项目需要,学习了两天的Angular后开始着手改之前的项目代码,这里大概说一下这一周学习 ...
- 关于Dropdownlist使用的心得体会
2013-07-23关于Dropdownlist使用的心得体会: Dropdownlist使用最多的几个属性: 一.Dropdownlist.Items,负责包含所有选项的容器 DropDownLis ...
- xp硬盘安装Fedora14 过程记录及心得体会(fedora14 live版本680M 和fedora14 DVD版本3.2G的选择)
这次电脑奔溃了,奇怪的是直接ghost覆盖c盘竟然不中.之前电脑上硬盘安装的fedora14操作系统,也是双系统.不知道是不是这个问题,记得同学说过,在硬盘装fedora之后,要手动修改c盘隐藏的那个 ...
随机推荐
- CSDN 原力(声望,影响力) -- 设计草案
目标 CSDN 希望成为开发者学习,成长和成就的平台.我们已经有很多功能来支持开发者的职业成长了, 如何衡量成就呢?我们希望用 原力 (以前也叫 影响力,声望) 来体现用户的成就, 并希望用原力来帮助 ...
- 基于图的广度优先搜索策略(耿7.11)--------西工大noj.20
目录 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ...
- Vxe-table 高亮当前行
需求 1 :设置初始高亮 子组件: 父组件 需求 2 :高亮行的变化,需要把数据传递到兄弟组件中 解决办法:EventBus 参考链接: http://t.csdn.cn/iwOJc main.js ...
- 基于WPF重复造轮子,写一款数据库文档管理工具(一)
项目背景 公司业务历史悠久且复杂,数据库的表更是多而繁杂,每次基于老业务做功能开发都需要去翻以前的表和业务代码.需要理解旧的表的用途以及包含的字段的含义,表少还好说,但是表一多这就很浪费时间,而且留下 ...
- Vue 自定义事件 && 组件通信
1 App.vue 2 <template> 3 <!-- 4 组件的自定义事件: 5 1.一种组件间通信的方式,使用于:子组件===>父组件 6 2.使用场景:A是父组件,B ...
- Golang 汇编asm语言基础学习
Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...
- Vector3类定义
大家一定要先看书,在看我的随笔啊.不然不知道原理的.而且我是不写教程的,只是写笔记怕自己忘记了. 我把所有的基础类放在了名叫geometry的文件中,包含Vector3, Normal3, Point ...
- HDU 1542/POJ 1151 Atlantis (scaning line + segment tree)
A template of discretization + scaning line + segment tree. It's easy to understand, but a little di ...
- 原生应用、Web 应用和混合应用的概念,以及 Flutter 技术是什么
应用类型 原生应用 原生应用就是使用特定的语言开发的应用,例如 Android 原生应用.Windows 原生应用.iOS 原生应用等.开发 Android 原生应用时,其特定的编程语言为 Java ...
- day27--Java集合10
Java集合10 21.集合家庭作业 21.1Homework01 按要求实现: 封装一个新闻类,包括标题和内容属性,提供get.set方法,重写toString方法,打印对象时只打印标题: 只提供一 ...