参考文档:

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. LInux:网络连接的设置

    主机名的配置 主机名的配置(配置文件/etc/hostname) 1.使用 hostname 命令临时设置主机名 命令格式:hostname [新主机名] 2.永久设置主机名 命令格式:hostnam ...

  2. vue 借用element-ui实现头像上传 axios发送请求

    <!-- 上传组件 --> <!-- 总结一下: action 写图片上传请求的路径 去路径哈 show-file-list就是当你上传时,是否会显示出上传的是哪一个图片,一般为fa ...

  3. txt换行追加写入

    with open(negative_txt, 'a') as f: patch_name1 = patch_name + '\n' f.write(patch_name1)

  4. Java之匿名对象

    匿名对象概念 创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量.虽然是创建对象的简化写法,但是应用场景非常有限.匿名对象 :没有变量名的对象. 格式: new 类名(参数列表): // ...

  5. windows10安装最新的redis

    官方给的redis的windows版本最新为3,而linux版本是5 这里通过win10子系统安装,win10子系统的配置见另一篇博客https://www.cnblogs.com/MC-Curry/ ...

  6. Sql Server 判断表是否存在方法总结

    #使用场景: 1.在创建表之前,需要先判断该表是否已经存在: 2.在删除表之前,需要先判断该表是否已经存在: #方法总结: 1.判断实体表是否存在的方法: 1).方法一: * from sysObje ...

  7. 美团技术分享:深度解密美团的分布式ID生成算法

    本文来自美团技术团队“照东”的分享,原题<Leaf——美团点评分布式ID生成系统>,收录时有勘误.修订并重新排版,感谢原作者的分享. 1.引言 鉴于IM系统中聊天消息ID生成算法和生成策略 ...

  8. leetcode一刷总结,明天二刷

    1:基础的数据结构:图掌握极差,二叉树次之 2:常用的算法思想:dp,深度有先,广度优先等等. 3:优化以解决的题目,注意思想的总结 4:将约150道题都刷掉 5:优先解决设计算法思想的题目类别,其次 ...

  9. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 5

    23.3  接口的安全控制规范 23.2节的示例实现了一个简单接口,但是这个接口此时是在“裸奔”的.因为这个接口所有人都可以请求,不仅我们的客户端可以正常访问数据,如果有人使用如fiddler.wir ...

  10. vue中template的作用及使用

     先来看一个需求:下图div用v-for做了列表循环,现在想要span也一起循环,应该怎么做? 有3种方法可以实现 ①:直接用v-for对span也循环一次(该方法虽然可以使用,但不要用这种方式,因为 ...