参考文档:

https://www.liaoxuefeng.com/wiki/896043488029600

https://git-scm.com/docs/git-fsck

一、介绍

Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

集中式      (svn)

分布式(git)

二、安装

如果使用yum安装的话 默认是使用1.8版本的。建议使用更高的版本

yum  install  -y   git
yum list  git

推荐使用编译安装。版本更高。

yum install  -y  curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
wget https://github.com/git/git/archive/v2.21.0.tar.gz
tar -xzvf v2.21.0.tar.gz
cd /opt/git-2.21.0 make prefix=/opt/git all
make prefix=/opt/git install
rm -rf /usr/bin/git
ln -s /opt/git/bin/git /usr/bin/git
git --version

三 、创建版本库

就是创建目录,然后初始化 就可以了 。

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init ## 初始化
Initialized empty Git repository in /Users/michael/learngit/.git/

提交用户信息指令

git config --global  user.name  "rrtest"
git config --global user.emial "rrtest@test.com"
git  config --list # 查看信息

git的4个 区域

新的文件(untracked未被追踪管理的状态)------------>  add  暂存区的文件(staged 筹划状态 newfile,staged)-------> commit 本地仓库文件(未被修改的状态)------->  push  就到远程库了。

提交指令

git add readme.txt                           # 提交到暂存区
修改的文件名
git commit -m "wrote a readme file" # 提交暂存区的所有修改
git status 查看状态
git status -s 转改概览
git diff 尚未暂存的文件
git diff --staged 暂存区文件
git rm 从版本库中移除
git reset HEAD <file> 从暂存区中移除 ==== 老版本用这个指令 git rm --cached <file>
git mv 相当于mv 、git rm 、 git add 三个命令

撤销之前的修改 可以使用 checkout

这边 修改了一个文件

[root@localhost jenkins_git]# cat user.txt
admin qq124536393
[root@localhost jenkins_git]# echo "aaaaa" >> user.txt
[root@localhost jenkins_git]# cat user.txt
admin qq124536393
aaaa

查看状态

这个时候如果这个文件我们修改太多,想还原回去的话,可以之后--checkout

[root@localhost jenkins_git]# git checkout -- user.txt      ##  撤销操作,其实相当于切换了文件的head头指针。
(文件名)
[root@localhost jenkins_git]# cat user.txt
admin qq124536393

这样之前的操作就取消了。再次查看状态,其实是还原了。

查看提交日志

git log                            #  查看提交日志
git log --pretty=oneline # 可以屏蔽一些信息
git reflog # 查看提交历史记录
[root@localhost jenkins_git]# git log  --pretty=oneline
da7e0c371a9738e267e0c9314eceebca462facd3 add hello jenkins
aff4019ae0ad390dac43b5fe4b3643c93e6453ef add pro1
版本号 提交信息

退回

git  本机有3个工作区域 工作目录,缓存目录,本机仓库

工作目录回滚

git checkout -- user.txt

缓存目录回滚

git reset HEAD <file>    从暂存区中移除 ==== 老版本用这个指令  git rm --cached <file>

本地仓库回滚 ,使用reset

一些参数介绍

--soft   只回退了本地仓库。缓存区和工作目录都不会改变。 
--mixed 默认选项,本地仓库和缓存区到你指定的提交同步,但工作目录不受影响。
--hard 本地仓库,缓存区和工作目录都同步到你指定的提交
git  reset   --hard   HEAD^
HEAD是当前版本的意思。 上一个版本就是HEAD^,上上一个版本就是HEAD^^,HEAD~100退回之前100版本。
git reset  --hard  da7e0c ## 指定回退版本。 需要知道准确的版本号。

一些报错处理:

一、

git fatal: index file smaller than expected

解决:

rm .git/index
$ git reset HEAD . > Unstaged changes after reset:
modified foo.txt
modified bar.txt 参考: https://www.e-learn.cn/content/wangluowenzhang/634484

二、

error: object file .git/objects/xxxxxxxx  is empty

这个要复杂点

cp -a .git .git-old                                      #  本分一下
git fsck --full # 验证数据库中对象的连接性和有效性
find . -type f -empty -delete -print # 删除空文件
git fsck --full # 再检查次

参考

https://stackoverflow.com/questions/11706215/how-to-fix-git-error-object-file-is-empty

https://www.cnblogs.com/chinxi/p/6139469.html

1. git 基础的更多相关文章

  1. [转] Git 基础 - 打标签

    2.6 Git 基础 - 打标签 打标签 同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签.人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做.本节我们一起来学习如何列 ...

  2. Git基础操作

    配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a ...

  3. git基础及分支

    关于版本控制 git是一种分布版本控制系统,每一主机都保存了完整副本.必杀技是分支. 在Windows可安装git客户端msysgit. git基础 第一次看progit觉得有点不懂,不懂版本控制,一 ...

  4. 《Pro Git》笔记2:Git基础操作

    第二章 Git基础 Git基础包括:版本库的创建和获取,文件添加修改提交等基本操作,状态查询,远程版本库管理和同步,打标签. 1.取得项目的Git版本库 基于Git的工作流要以Git版本库为基础,即可 ...

  5. Git详解之二 Git基础

    Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...

  6. 2.4 Git 基础 - 撤消操作

    2.4 Git 基础 - 撤消操作 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失 ...

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

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

  8. 【git学习二】git基础之git管理本地项目

    1.背景        git基础打算分两部分来说,一部分是对于本地项目的管理,第二部分是对于远程代码仓库的操作. git运行本地项目管理包含对于相关文件的追踪,暂存区的比較分析,提交,撤销等功能. ...

  9. Git基础教程(二)

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

  10. Git详解之二:Git基础

    Git 基础 读完本章你就能上手使用 Git 了(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读).本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到 ...

随机推荐

  1. 整理几个经常在H5移动端开发遇到的东西。

    本篇主要是我个人的学习分享. 1.弹出数字键盘 <!-- 有“#” “*” 符号输入 --> <input type="tel"> <!-- 纯数字 ...

  2. 15.flag在index里

    查看一下源代码 点进去,发现没有什么有价值的东西~ 根据题目提示flag在index.php里面,所以我们可以通过php://filter读取文件内容 构造payload: http://123.20 ...

  3. java异常处理机制详解

    java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我 ...

  4. 【洛谷5072】[Ynoi2015] 盼君勿忘(莫队)

    点此看题面 大致题意: 一个序列,每次询问一个区间\([l,r]\)并给出一个模数\(p\),求模\(p\)意义下区间\([l,r]\)内所有子序列去重后值的和. 题意转化 原来的题意看起来似乎很棘手 ...

  5. [译]ABP v1.0终于发布了!

    ABP v1.0终于发布了! 今天是个大日子!经过约3年的不断开发,第一个稳定的ABP版本,1.0,已经发布了.感谢为该项目做出贡献或试用过的每个人. 立即开始使用新的ABP框架:abp.io/get ...

  6. golang数据结构之选择排序

    //SelectSort 选择排序 func SelectSort(arr *[]int) { ; i < len(arr); i++ { tmp := arr[i] index := i ; ...

  7. pandas 学习 第8篇:Index 对象 - (创建、转换、排序)

    Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...

  8. oracle中decode函数用法及应用

    用法 1.decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 相当于if else 那种方式. 2.decode(字段或字段的运算,值1,值2,值3) 当字段或字段的运 ...

  9. [算法]LeetCode 120:三角形最小路径和

    题目描述: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和 ...

  10. [debug] 解决在C++编写过程中的“找到一个或多个多重定义的符号”

    如下图: 其在 common.h 中定义了一个变量a ,然后在两个 cpp 文件中都是用它. 在这种情况下,链接时就会出现 “找到一个或多个多重定义的符号”. 解决方案: 在某个cpp文件中定义,然后 ...