Git 原理与使用
Git 安装
如果你的的平台是centos,安装git相当简单,以我的centos7.6为例:
sudo yum -y install git
如果你的的平台是ubuntu,安装git相当简单,以我的ubuntu20.04为例:
sudo apt-get install git -y
Git 基本操作
1.创建 Git 本地仓库
在要管理的目录下使用
git init
当前目录下多了一个 .git 的隐藏文件, .git 目录是 Git 来跟踪管理仓库的,不要手动修改这个目录里面的文件,不然改乱了,就把 Git 仓库给破坏了。
2.配置 Git
当安装 Git 后首先要做的事情是设置你的 用户名称 和 e-mail 地址,这是非常重要的。配置命令为:
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
# 把 Your Name 改成你的昵称
# 把 email@example.com 改成邮箱的格式,只要格式正确即可。
–global 是⼀个可选项。如果使⽤了该选项,表⽰这台机器上所有的 Git 仓库都会使⽤这个 配置。如果你希望在不同仓库中使⽤不同的 name 或 e-mail ,可以不要 --global 选项,但要 注意的是,执⾏命令时必须要在仓库⾥
查看配置命令为:
git config -l
删除对应配置:
git config [--global] --unset user.name
git config [--global] --unset user.email
3.认识工作区、暂存区、版本库
-
工作区:是在电脑上你要写代码或文件的目录。
-
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,我们
把暂存区有时也叫作索引(index)。
-
版本库:又名仓库 (repository) 。工作区有一个隐藏目录 .git ,它不算工作区,而
是 Git 的版本库。这个版本库里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
-
在创建 Git 版本库时,Git 会为我们自动创建一个唯一的 master 分支,以及指向 master 的一个指针叫 HEAD。(分支和HEAD的概念后面再说)
-
当对工作区修改(或新增)的文件执行 git add 命令时,暂存区目录树的文件索引会被更新。
-
当执行提交操作 git commit 时,master 分支会做相应的更新,可以简单理解为暂存区的目录
树才会被真正写到版本库中。
-
由上述描述我们便能得知:通过新建或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件。必须要通过使用 git add 和 git commit 命令才能将文件添加到仓库中进行管理!!!
.git 的目录结构:
- index 就是我们的暂存区,add 后的内容都是添加到这⾥的
- HEAD 就是我们的默认指向 master 分⽀的指针,master保存的就是当前最新 的 commit id
- objects 为 Git 的对象库,⾥⾯包含了创建的各种版本库对象及内容。当执⾏ git add 命令 时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的 对象中,就位于 “.git/objects” ⽬录下
- objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改
4.添加文件–场景一
在包含 .git 的目录下新建一个 ReadMe 文件,我们可以使用 git add 命令可以将文件添加到暂存区:
添加一个或多个文件到暂存区:
git add [file1] [file2] ...
添加指定目录到暂存区,包括子目录:
git add [dir]
添加当前目录下的所有文件改动到暂存区:
git add .
再使用 git commit 命令将暂存区内容添加到本地仓库中:
提交暂存区全部内容到本地仓库中:
git commit -m "message"
提交暂存区的指定文件到仓库区:
git commit [file1] [file2] ... -m "message"
-
注意 git commit 后面的 -m 选项,要跟上描述本次提交的 message,由用户自己完成,这部分内容绝对不能省略,并要好好描述
-
可以多次 add 不同的⽂件,⽽只 commit ⼀次便可以提交所有⽂件
查看历史提交记录:
git log
git log --pretty=oneline
类似23807c5…56eed6 是 commit id
查看当前仓库的状态
git status
显⽰暂存区和⼯作区⽂件的差异
git diff [file]
来查看版本库和⼯作区⽂件的区别
git diff HEAD -- [file]
5.版本回退
git reset [--soft | --mixed | --hard] [HEAD]
-
mixed 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内 容,⼯作区⽂件保持不变。
-
soft 参数对于⼯作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
-
hard 参数将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命 令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重。
-
HEAD 说明: 可直接写成 commit id,表⽰指定退回的版本 HEAD 表⽰当前版本, HEAD^上⼀个版本 ,HEAD^^ 上上⼀个版本以此类推…
-
可以使⽤ ~ 数字表⽰: HEAD~0 表⽰当前版本 ,HEAD~1 上⼀个版本 ,HEAD~2 上上⼀个版本以此类推
-
版本回退到上一个版本后如果反悔了可以使用git relog,记录着本地每一次命令
git relog
- Git 版本回退的时候,可以使⽤部分 commit id 来代表⽬标版 本
场景1:工作区已修改还未add,想回退到最近一次修改
git checkout -- [file] #-- 不能丢
场景2:工作区已修改且已经add但未commit
git reset HEAD #修改暂存区
git checkout -- [file] #修改工作区
场景3:工作区已修改且已经add且commit
git reset HEAD^ --hard
6.删除文件
确实想要删
只删除工作区的文件没有用,必须删除暂存区的文件且commit
git rm [file]
git commit -m "rm file"
误删了想恢复
git checkout -- [file]