Git 基本操作 && ⼯作区、暂存区、版本库

创建本地仓库:

创建 Git 本地仓库

要提前说的是,仓库是进行版本控制的⼀个文件目录。我们要想对文件进行版本控制,就必须先创建⼀个仓库出来。

首先touch 一个文件:

初始化仓库:

创建完成后,我们会发现当前目录会出现一个.git 文件

我们发现,当前目录下多了⼀个 .git 的隐藏文件, .git 目录是 Git 来跟踪管理仓库的,不要手动修改这个目录里面的文件,不然改乱了,就把 Git 仓库给破坏了。

配置 Git

当安装 Git 后首先要做的事情是设置你的 用户名称 和 e-mail 地址,这是非常重要的。配置命令为:

git config user.name "XX"
git config user.email  "XXXXX"
# 把 Your Name 改成你的昵称
# 把 email@example.com 改成邮箱的格式,只要格式正确即可。

查看配置命令为:

git config -l 

如果这样显示则说明配置成功。

删除name 和email 的操作。

git config  --unset user.name
git config  --unset user.email

在系统下并非只有一个git的仓库,如果我们想让每个仓库都配置上我们设置的name 和 email 的话,就要使用 git config --global user.name/email

删除对应的配置命令为:

git config [--global] --unset user.name
git config [--global] --unset user.email

工作区、暂存区、版本库

工作区:是在电脑上你要写代码或文件的目录。

暂存区:英文叫 stage 或 index。⼀般存放在 .git 目录下的 index 文件(.git/index)中,我们

把暂存区有时也叫作索引(index)。

版本库:又名仓库,英文名 repository。工作区有⼀个隐藏⽬录 .git ,它不算工作区,而

是 Git 的版本库。这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git

都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原"。

注意:我们不能手动修改 ".git" 文件下的任何文件。那么我们改如何管理我们的readme文件呢?

图中左侧为工作区,右侧为版本库。Git 的版本库里存了很多东西,其中最重要的就是暂存区。

在创建Git版本库时,Git会为我们自动创建⼀个唯⼀的 master 分支,以及指向 master 的⼀个指针叫 HEAD。

当对工作区修改(或新增)的文件执行 git add 命令时,暂存区目录树的文件索引会被更新(并没有存对象,只存索引,所以是轻量级的)。同时修改的工作区内容会写入对象库的一个新的git对象中。

当执行提交操作 git commit 时,master 分支会做相应的更新,可以简单理解为暂存区的目录

树才会被真正写到版本库中,这是git才对其进行了真正的管理。

由于这是我们新建的一个仓库,没有进行add操作 所以还没有暂存区。

我们能对工作区的 "readme" 文件进行直接的管理吗,经过上述的解释,只能通过 add commit 等操作之后,将readme 添加至版本库,我们才能对其进行管理。

首先进行 add 操作 ,我们可以git add . 也可以git add readme ,前者是将工作区所有文件添加至暂存区,而后者则是将指定文件添加至暂存区。

之后进行commit 操作:将暂存区内容提交至本地仓库(版本库)。

我们可以发现git给我们维护的十分详细。

如何查看我们提交的信息,使用 git log 或者 git log --pretty=oneline,区别在于是否一行打印出来。

其中每次提交都会生成commit id 来轻量化的记录我们打印的信息。

查看 .git文件

先来看看我们的 .git 的⽬录结构:

  1. index 就是我们的暂存区,add 后的内容都是添加到这⾥的。

  2. HEAD就是我们的默认指向 master 分支的指针:

  3. objects 为 Git 的对象库,里面包含了创建的各种版本库对象及内容。当执行git add 命令时,暂存区的⽬录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的⼀个新的对象中 ,就位于 ".git/objects" 目录下。

HEAD里面存储的是 ref: refs/heads/master 那么master 中是什么呢?我们可以通过打印出master来查看。

我们发现master里存放的是最近一次提交的commit id。

注意:commit id 我们要分为前后两部分来看,查找 object 时要将 commit id 分成2部分,其前2位是⽂件夹名称,后38位是文件名称。找到这个文件之后,⼀般不能直接看到里面是什么,该类文件是经过(安全哈希算法)加密过的文件,好在我们可以使用 git cat-file 命令来查看版本库对象的内容

其中在详细的信息中我们可以发现有一行为tree ,打印tree的commit id 我们发现是我们进行提交的readme 文件以及其 commit id ,在对其commit id 进行打印我们会发现里面显示出来我们修改的内容。

我们每一次对文件的修改,提交到本地仓库后都会被git记录下来。修改的工作区内容会写入对象库的一个新的git中。

添加文件:

如果我们创建了一个至多个文件但是只对其中的一个文件进行add commit 操作,那么仅仅这一个文件被放到本地仓库了,要是想对余下的文件也让其放到本地仓库中,我们就需要对其余的文件进行"add" 或者 "add." ,之后今天commit就能够放到本地仓库了。

Git 比其他版本控制系统设计得优秀,因为 Git 跟踪并管理的是修改,而非文件。什么是修改?比如你新增了一行,这就是⼀个修改,删除了一行,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些又加了⼀些,也是⼀个修改,甚至创建⼀个新文件,也算⼀个修改。

我们对readme文件添加一行代码。

此时,仓库中的 readme 和我们⼯作区的 readme 是不同的,使用 git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

在一个项目中往往一次修改的代码往往成千上万行,此时我们想要查看工作区与本地仓库之间的代码我们就要使用 git diff XXX 命令 。

此时再进行add操作,然后查看状态发现此时状态已经改变。

当我们commit 之后,显示如下。

相关推荐
但老师6 小时前
Git遇到“fatal: bad object refs/heads/master - 副本”问题的解决办法
git
秃头女孩y6 小时前
git创建分支
git
研究是为了理解11 小时前
Git Bash 常用命令
git·elasticsearch·bash
DKPT12 小时前
Git 的基本概念和使用方式
git
Winston Wood15 小时前
一文了解git TAG
git·版本控制
喵喵先森15 小时前
Git 的基本概念和使用方式
git·源代码管理
xianwu54317 小时前
反向代理模块
linux·开发语言·网络·git
binishuaio19 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
会发光的猪。20 小时前
如何在vscode中安装git详细新手教程
前端·ide·git·vscode
stewie621 小时前
在IDEA中使用Git
java·git