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. OpenCV视频防抖技术解析

    视频防抖有很多种技术,各有优劣,主流的目前分为三种:EIS电子防抖EIS电子防抖是通过软件算法实现防抖的.其技术运作原理是通过加速度传感器和陀螺仪模块侦测手机抖动的幅度,从而来动态调节整ISO.快门以 ...

  2. redis集群的三种方式

    Redis三种集群方式:主从复制,哨兵模式,Cluster集群. 主从复制 基本原理 当新建立一个从服务器时,从服务器将向主服务器发送SYNC命令,接收到SYNC命令后的主服务器会进行一次BGSAVE ...

  3. Python 阿里云盾滑块验证

    本文仅供学习交流使用,如侵立删! 记一次阿里云盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.pyautogui 分析 最近在做中国庭审公开网数据分析的时 ...

  4. 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...

  5. 使用.NET简单实现一个Redis的高性能克隆版(七-完结)

    译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...

  6. 社区之光:我和 Apache DolphinScheduler 的这一年

    背景 没错,本文的主人翁就是那个在多个 DolphinScheduler 用户群超级活跃,"孜孜不倦" 地给用户各种答疑的小伙,如果你在群里问过问题,伯毅多半概率回答过,哈哈,今天 ...

  7. Redis 15 主从复制

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 主从复制 ...

  8. 【AGC】集成华为AGC崩溃服务实用教程

    ​简介 AppGallery Connect(简称AGC)崩溃服务提供了轻量级崩溃分析服务,集成Crash SDK,可以实现零代码快速集成,您的应用能够在崩溃时自动收集崩溃报告,帮助您了解应用版本质量 ...

  9. .net 温故知新:【7】IOC控制反转,DI依赖注入

    IOC控制反转 大部分应用程序都是这样编写的:编译时依赖关系顺着运行时执行的方向流动,从而生成一个直接依赖项关系图. 也就是说,如果类 A 调用类 B 的方法,类 B 调用 C 类的方法,则在编译时, ...

  10. Vue3中插槽(slot)用法汇总

    Vue中的插槽相信使用过Vue的小伙伴或多或少的都用过,但是你是否了解它全部用法呢?本篇文章就为大家带来Vue3中插槽的全部用法来帮助大家查漏补缺. 什么是插槽 简单来说就是子组件中的提供给父组件使用 ...