Git 分布式版本控制系统

什么是Git?
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
官网地址:https://git-scm.com/
安装部署: Windows版本下载,下载之后是.exe文件 双击直接运行,傻瓜式安装即可
在这里插入图片描述
使用
查看版本信息
$ git --version

1.使用前配置
$ git config --global user.name “Yu Hao”
$ git config --global user.email 1993059338@qq.com

usage: git config [] 参数设置
参数级别
–global use global config file 对当前用户 所有项目/仓库 有效 !!!
–system use system config file 对系统所有登录的用户有效
–local use repository config file “对某个项目/仓库有效”
2.查看配置信息
$ git config --global --list
3.创建git仓库
一个项目 会对应一个git仓库
两种方式:
1.项目存在:
1.切换到项目目录
2. git init
2.项目不存在 (test02是项目名称)
git init test02
查看.git文件 用 ll -a

案例实践 :
1.创建一个readme文件
vim readme
2.把文件 添加到 暂存区
git add readme
3.查看当前工作区与缓存区的差异 红色 !!!(以及暂存区与本地仓库的差异 绿色)
git status
4.提交到本地仓库
git commit -m “Add readme”
5.查看提交状态
git log

查看 commit提交信息 
git log [<options>] [<revision-range>] [[--] <path>…​] 
查看所有commit 日志: 
git log --reflog 
git log --all
--- 回退版本 : 
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
已经commit(提交到本地仓库)的时候,后面参数要跟上commit的hash值 不用全部粘贴,取前多少位就可以
git reset --hard  3ca5bdcb02f6dc68
没有commit(提交到本地仓库)的时候,可以直接撤回
git reset --hard  

commit的hash值

项目流程
创建本地仓库 git init flower

1.添加文件 index.html
git status
git add index.html
git status
git commit -m “Add index”
git log

2.添加 css js
git status
git add css/ js/
git status
git commit -m “Add css&js”
git log

3.修改文件
git status
git add -u (对已存在文件生效)!!!
git status
git commit -m “Add css&js”
git log

git add ./* 当前目录下的所有
项目文件重名名
常规操作之后暂存区还是会存在改名之前的文件
删除命令 git rm xxx文件

86153@LAPTOP-9TG704G0 MINGW64 /d/夕姨大数据/software/test/test01 (master)
$ git mv 1.log 886.log

86153@LAPTOP-9TG704G0 MINGW64 /d/夕姨大数据/software/test/test01 (master)
$ git status
On branch master
Changes to be committed:
(use “git restore --staged …” to unstage)
renamed: 1.log -> 886.log

86153@LAPTOP-9TG704G0 MINGW64 /d/夕姨大数据/software/test/test01 (master)
$ git commit -m “Rename”
[master 79c4d59] Rename
1 file changed, 0 insertions(+), 0 deletions(-)
rename 1.log => 886.log (100%)

查看版本历史
git log

git log [<options>] [<revision-range>] [[--] <path>…​]

--reflog / --all 

1.指定输出格式
1.git log --format=oneline
2.git log --oneline 最常用 !!!
3.git log --oneline --all
4. git log --oneline -n 2 显示最近2次commit提交记录

分支 :一个分支一条线
与工作流程有关,一个分支就是一个独立的开发空间

1.查看分支
	 git branch -v
2.创建分支 
	git branch -c dev
3.切换分支
git checkout branch
补充:创建分支并切换到该分支   !!!
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new-branch>] [<start-point>]
git checkout -b bigdata  17912a2

从工作区直接提交到本地仓库(仅限于已存在文件的修改、删除)
git commit -am "Modified 11.log"

查看每个分支下面的commit 以图形化的方式
git log --all --oneline --graph

图形界面展示:
gitk --all
在这里插入图片描述

tag: 标签  一般用于标记发布版本  相当于记号一样 1.0  2.0
可以在gitk 窗口中直接创建,也可以用命令实现

.git文件夹
.git => 本地仓库

-rw-r–r-- 1 hadoop 197121 13 Oct 22 21:30 COMMIT_EDITMSG
-rw-r–r-- 1 hadoop 197121 24 Oct 22 21:26 HEAD
-rw-r–r-- 1 hadoop 197121 41 Oct 19 22:16 ORIG_HEAD
-rw-r–r-- 1 hadoop 197121 130 Oct 22 21:02 config
-rw-r–r-- 1 hadoop 197121 73 Oct 19 21:15 description
-rw-r–r-- 1 hadoop 197121 548 Oct 22 21:43 gitk.cache
drwxr-xr-x 1 hadoop 197121 0 Oct 19 21:15 hooks/
-rw-r–r-- 1 hadoop 197121 281 Oct 22 21:30 index
drwxr-xr-x 1 hadoop 197121 0 Oct 19 21:15 info/
drwxr-xr-x 1 hadoop 197121 0 Oct 19 21:30 logs/
drwxr-xr-x 1 hadoop 197121 0 Oct 22 21:30 objects/
drwxr-xr-x 1 hadoop 197121 0 Oct 19 21:15 refs/

1.HEAD
refs/heads/bigdata – 说明我们正在工作的分支 bigdata

2.config
记录 当前项目 的一些配置信息

user.name=xiyi
user.email=xiyidata@qq.com

1.添加参数 
git config --local user.name "chayedan"
2.反之  修改配置文件 config

3.refs/ 文件夹
drwxr-xr-x 1 hadoop 197121 0 Oct 22 21:30 heads/ 存储分支 =》commit
drwxr-xr-x 1 hadoop 197121 0 Oct 22 21:49 tags/
heads:
master 文件 :
cat master
8ad328c3ada49474a84245d4caf4faca216c1cfc commit hash <=》commit id
实际上在.git 文件夹下 也是一个文件
8ad328c3ada49474a84245d4caf4faca216c1cfc 就是文件名字
文件在object文件夹里面
git工具提供的命令进行查看:
-t 类型
-p 内容

git cat-file -t 8ad328c3ada49
git cat-file -p 8ad328c3ada49

$ git cat-file -p 8053e40e2e
100644 blob 5f2f16bfff90e6620509c0cf442e7a3586dad8fb 11.log
11.log这个文件是blob类型,hash值是5f2f16bfff90e6620509c0cf442e7a3586dad8fb
100644 blob c200906efd24ec5e783bee7f23b5d7c941b0c12c 22.log
100644 blob 6069d0f6b1c881b336e0dbafdf4bfd77a76b06a2 readme

repository object:
跟存储有关:
commit 、tree、blob

4.objects/
git性能好的原因是: 只要任何文件的文件内容相同 ,在git眼里就是唯一的blob
git这样有什么好处? 节省存储空间

分离头指针
当前项目工作在没有分支的commit下

 git checkout 631cff3 
 'detached HEAD' state

HEAD
1.HEAD 用于指向某个分支的commit 或者用于指向某个没有分支的commit
2.切换分支 HEAD会跟着变的
3. HEAD 不是指向某一个分支 而是指向分支上的一个commit

1.比较commit历史差异

git diff : 
	git diff [<options>] [<commit>] [--] [<path>…​]
	git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>…​]
	git diff [<options>] [--merge-base] <commit> [<commit>…​] <commit> [--] [<path>…​]
	git diff [<options>] <commit>…​<commit> [--] [<path>…​]
	git diff [<options>] <blob> <blob>
	git diff [<options>] --no-index [--] <path> <path>

	git diff <commit>…​<commit> 
	HEAD 可以用于快速指代 当前的commit 
	HEAD~1 表示HEAD的前一个commit ,~2表示HEAD~1的前一个commit
	git diff  HEAD~1 HEAD

删除分支
git branch -d bigdata delete fully merged branch 需要merge到主分支 之后才能删除
git branch -D bigdata delete branch (even if not merged) 直接删除 不需要merge (但是会把这个分支的历史一起删除)
什么是merge? 将多个分支合并,合并到一个分支上面
git merge

修改commit的message信息
1.修改最新提交的commit
git commit --amend
在这里插入图片描述

2.修改历史提交的commit   (底层分离头指针)

git rebase    变基
	 Reapply commits on top of another base tip  基于一个commit之上重新提交commit 
	git rebase [-i | --interactive] [<options>] [--exec <cmd>]
	[--onto <newbase> | --keep-base] [<upstream> [<branch>]]
	git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
	--root [<branch>]
	git rebase (--continue | --skip | --abort | --quit | --edit-todo | --show-current-patch)
	
	git rebase -i <after-this-commit>

	1.当前要修改的commit 基于前一个commit进行更改 
	2.修改后的commit 一定会生成新的commit 

p, pick = use commit 选择哪个commit
r, reword = use commit, but edit the commit message 重新改写commit
s, squash = use commit, but meld into previous commit 合并之前的commit

在这里插入图片描述
参数换成r之后保存即可
在这里插入图片描述

保存后跳转到此页面直接修改即可
在这里插入图片描述

3.合并commit
git rebase -i

	注意: 
		多个commit合并到一个commit 
			1.指定 最终合并到 哪个commit 

在这里插入图片描述

工作区 vs 暂存区 vs 本地仓库
1.查看文件差异
git status => 三个区 文件内容是否有差异
git status
git add 1.log
git status

查看文件内容差异:
	git diff 工作区 和 暂存区具体差异  
	git diff --cached  暂存区 和 本地仓库具体差异 
	
git diff --help : 
	git-diff - Show changes between commits, commit and working tree, etc

	git diff [<options>] [<commit>] [--] [<path>…​]
	git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>…​]
	git diff [<options>] [--merge-base] <commit> [<commit>…​] <commit> [--] [<path>…​]
	git diff [<options>] <commit>…​<commit> [--] [<path>…​]
	git diff [<options>] <blob> <blob>
	git diff [<options>] --no-index [--] <path> <path>

	git diff --cached [--] [<path>…​] 暂存区 和 本地仓库具体差异   
	eg:$ git diff --cached -- 886.log (可以指定查看具体文件差异)
	
	git diff [<commit>] [--] [<path>…​] 工作区 和 暂存区具体差异

恢复操作
git reset --hard commit 切换版本
1.在工作区执行add操作,提交到暂存区之后 的撤销操作
git restore --staged …

在这里插入图片描述

  1. 把工作区文件 回撤到原来状态
    git restore …
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值