参考文档:

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. SQLPrompt 7.2发布
  2. IOC-AOP
  3. LeetCode 1 Two Sum(二分法)
  4. MFC获取光标相对于控件所在行
  5. laravel Authentication and Security
  6. 重温sql语句中的join操作
  7. Date.prototype.format,js下的时间格式处理函数
  8. Python 可变对象和不可变对象
  9. HDU_2045——RPG问题,递推
  10. IT痴汉的工作现状18-思维定式
  11. Struts2流程分析与工具配置
  12. 1.用代码演示String类中的以下方法的用法 (2018.08.09作业)
  13. (转)CentOS7中防火墙的基本操作
  14. MySQL 遇到的问题以及解决方案
  15. mysql 5.7 ERROR 1820 (HY000):
  16. NVMe协议1.3c(一) 概述
  17. 滑动条QSlider
  18. python.numpy.std()计算矩阵标准差
  19. noip第33课作业
  20. J-Link调试查看变量值总是显示&lt;not in scope&gt; 和&lt;cannot evaluate&gt;问题

热门文章

  1. idea安装以及使用
  2. layUI学习第四日:layUI布局系列一
  3. docker修改系统时间总结
  4. Codeforces Round #597 (Div. 2) F. Daniel and Spring Cleaning 数位dp
  5. 第02组 Beta版本演示
  6. 如何将Azure SQL 数据库还原到本地数据库实例中
  7. Flink1.7.2安装部署的几种方式
  8. Mysql - 存储过程 - 定时删表
  9. Netty — 线程模型
  10. 项目中出现多个域名下的Cookie