一、Git基础概念

Git功能简单概述

  • 可以随时回滚到之前的代码版本(git reset --hard );
  • 协同开发时不会覆盖别人的代码(分支);
  • 留下修改记录(git log);
  • 发版时可以方便的管理不同的版本;

1、Git工作模式

操作

  • 90%以上的操作在个人计算机上
  • 添加文件、修改文件、提交变更、查看版本历史等
  • 版本库同步
  • 将本地修改推送到版本服务器

版本控制系统:

2、Git文件存储

注意文件存储和SVN不同:

Git 不按照SVN那样对待或保存数据。 反之,Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。

总结特点:

  • 直接记录快照snapshoot。而并非比较差异;
  • 近乎所有操作都在本地执行;
  • 时刻保持数据完整性;
  • 多数操作仅添加数据;
  • 文件的三种状态(只会处于这三种状态)
    • 已修改(modified)
    • 已暂存(staged)
    • 已提交(committed)

3、Git文件状态

  • Git文件: 已被版本库管理的文件;
  • 已修改: 在工作目录(working directory)修改Git文件;
  • 已暂存: 对已修改的文件执行Git暂存操作,将文件存入暂存区(staging area); (注意SVN中没有暂存区这个概念)
  • 已提交: 将已暂存的文件执行Git提交操作,将文件存入版本库(git directory);

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作‘索引’,不过一般说法还是叫暂存区域。

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域git add
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录git commit

git add 放到暂存区;
git commit 从暂存区放到版本仓库中;

4、本地版本库与服务器版本库

Git是分布式的。

二、Git常用命令

1、config和email

关于配置user.nameuser.email:

可以有三个地方配置:

比如输入git config命令, 会出现下面三个信息,即系统级别system,全局global,和局部local。其中优先级不断升高。

zxzxin@zxzxin:~/Git/gitlearn$ git config
usage: git config [<options>] Config file location
--global use global config file
--system use system config file
--local use repository config file
-f, --file <file> use given config file
--blob <blob-id> read config from given blob object

这里展示一下配置我们局部的gitlearn仓库:

git 提交的id(commit id)是一个摘要值,这个摘要值实际上是一个sha1计算出来的。

2、git rm 和rm的区别

git rm :

  • 1、删除了一个文件
  • 2、将被删除的文件纳入到了暂存区(stage);(可以直接调用git commit来提交)

若想恢复被删除的文件,需要进行两个动作:

  • 1、git reset HEAD test2.txt,将待删除的文件从暂存区恢复到工作区;
  • 2、git checkout -- test2.txt, 将工作区的修改丢弃掉;

**rm **:

  • 只是将文件删除;注意: 这时,被删除的文件并未纳入到暂存区当中。
  • 这时是提交(git commit)不了的。要想纳入暂存区,必须要再调用一次git add

实战对比:

3、git mv 和 mv的对比

git mv(和git rm 类似):

  • 先完成重命名;
  • 然后提交到暂存区;

git mv演示:

而 mv:

  • 只是完成重命名;
  • 需要自己调用git add提交到暂存区;

使用技巧: 可以通过git commit --amend -m '修正内容'更改上次错误的提交消息。(就是-m '')后面的提交信息写错了。

4、git log查看日志

git log -n 可以查看最近的n条日志。

git log --pretty=oneline以一行一行的方式显示出来。

查看git命令帮助:

5、.gitignore文件

在开发中,如果我们不想将所有的文件都放到git当中,而是要忽略少数一些文件(比如jar包、配置文件等),我们可以在我们的目录创建一个.gitignore文件,git就不会将这些文件放入暂存区,也不会提交(不会加入版本控制系统)。

此时我们可以创建一个.gitignore文件:

简而言之,放在.gitignore中的文件会直接被git无视。

其中,放在.gitignore中的文件也支持正则表达式。
例如:

  • *.a,会忽略所有.a结尾的文件;
  • !lib.a,不要忽略lib.a(排除这个忽略);
  • /test.txt,仅仅忽略项目根目录下的TODO文件,不包括子目录下的test.txt文件;
  • dir1/,忽略dir1/目录下的所有文件;
  • dir1/*.txt,会忽略dir1/a.txt但不会包括dir1/dir2/a.txt
  • 例如dir1/*.txt会忽略dir1下的所有.txt文件,dir1/*/*.txt会忽略dir1下所有层下的.txt,而dir1/**/*.txt会忽略dir1/下的任意层的.txt文件。

.gitignore中用#表示注释。

原文:Java架构笔记

免费Java高级资料需要自己领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G。
传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q

Git基础和入门的更多相关文章

  1. Git 快速入门--Git 基础

    Git 快速入门 Git 基础 那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余. 在开始学习 G ...

  2. Git与Repo入门(转载)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAykAAADuCAIAAACyDd+sAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4Xu ...

  3. 【转】Git与Repo入门----不错

    原文网址:http://www.cnblogs.com/angeldevil/p/3238470.html Git与Repo入门   版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工 ...

  4. ###Git 基础图解、分支图解、全面教程、常用命令###

    一.Git 基础图解 转自:http://www.cnblogs.com/yaozhongxiao/p/3811130.html Git 图解剖析 git中文件内容并没有真正存储在索引(.git/in ...

  5. Git基础教程(二)

    继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 配置命令:git config --global * 版本库初始化:git init 向版本库添加文件:git add * 提交 ...

  6. 版本控制工具Git工具快速入门-Windows篇

    版本控制工具Git工具快速入门-Windows篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近在学习Golang语言,之前的开发环境在linux上开发的,后来由于办公用的是w ...

  7. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  8. [易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]

    [易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates] 实用知识 装箱crates 我们今天来讲讲装箱技术crates. 什么是crates? 英语翻译是: 英 [kre ...

  9. [易学易懂系列|rustlang语言|零基础|快速入门|(15)|Unit Testing单元测试]

    [易学易懂系列|rustlang语言|零基础|快速入门|(15)] 实用知识 Unit Testing单元测试 我们知道,在现代软件开发的过程中,单元测试对软件的质量极及重要. 今天我们来看看Rust ...

随机推荐

  1. PHP扩展使用-GD

    一.相关函数 1. 获取信息 gd_info() #查看当前系统环境gd库支持的图片格式 getimagesize(imagefile) #获取图像大小,非GD库函数 imagex(imagefile ...

  2. Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip

    目录 Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip 场景 过程还原 结论 参考资料 Nginx+Docker部署模式下 asp.net core 获取真实的客户端 ...

  3. windows 下 创建项目的虚拟环境

    一. 为何使用虚拟环境 虚拟环境是Python解释器的一个私有副本,在这个环境你可以安装私有包,而且不会影响系统中安装的全局Python解释器. 在这个虚拟环境中的所有安装包,都是针对此环境的,不会被 ...

  4. Rocketmq原理&最佳实践

    MQ背景&选型 消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性.主要具有以下优势: 削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失.系统奔溃等问题 ...

  5. 接口测试Post和Get区别(面试题)

    1. HTTP接口传递数据最常用的方式: Get方式是从服务器上获取数据:在做数据查询时,建议用Get方式:如:商品信息接口.搜索接口.博客访客接口等. Post方式是向服务器传送数据 :在做数据添加 ...

  6. LeetCode 241. Different Ways to Add Parentheses为运算表达式设计优先级 (C++)

    题目: Given a string of numbers and operators, return all possible results from computing all the diff ...

  7. Kettle Unable to get list of element types for namespace 'pentaho'

    我把公司的kettle5.0升级到7.0之后遇到了这个问题,困扰了很久,百度谷歌都查不到结果,所以只能自己查找原因. 由于已经被搞好了,现在无法截图了,总之就是下面这行报错,遇到这个错误的同学估计也不 ...

  8. 6-ESP8266 SDK开发基础入门篇--操作系统入门使用

    了解了8266的串口了,这一节咱就自己写程序,处理一下数据,如果接收到 0xaa 0x55 0x01  就控制指示灯亮 0xaa 0x55 0x00  就控制指示灯灭 注意哈,我是用的假设没有操作系统 ...

  9. vue和react的区别

    数据: vue:双向数据绑定和单向数据流.双向数据绑定:DOM元素绑定的data值,当发生改变后,vue的响应式机制会自动监听data的变化重新渲染.单向数据流:当父组件给子组件传递数据的时候,子组件 ...

  10. Hello 2019 F 莫比乌斯反演 + bitset

    https://codeforces.com/contest/1097/problem/F 题意 有n个多重集,q次询问,4种询问 1. 将第x个多重集置为v 2. 将第y和z多重集进行并操作,并赋值 ...