什么是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
项目流程
创建本地仓库 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 …
- 把工作区文件 回撤到原来状态
git restore …