Git原理与使用------创建Git本地仓库,理解工作区、暂存区、版本库,添加文件

Git原理与使用

一、Git基本操作

1. 创建Git本地仓库

什么是仓库?

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

如何创建仓库?

创建一个Git本地仓库的对应命令为git init,注意命令要在文件目录下执行,例如:

[ycm@hcss-ecs-3ddc 2023_11_22]$ git init 
Initialized empty Git repository in /home/ycm/code/git/2023_11_22/.git/
[ycm@hcss-ecs-3ddc 2023_11_22]$ 
[ycm@hcss-ecs-3ddc 2023_11_22]$ ll -la
total 12
drwxrwxr-x 3 ycm ycm 4096 Nov 21 21:13 .
drwxrwxr-x 4 ycm ycm 4096 Nov 21 21:13 ..
drwxrwxr-x 7 ycm ycm 4096 Nov 21 21:13 .git

注意:这里我们可以看到,当前目录多了一个.git的隐藏目录,.git目录是Git来跟踪管理仓库的,不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

2. 配置Git

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

[ycm@hcss-ecs-3ddc 2023_11_22]$ git config user.name ycm
[ycm@hcss-ecs-3ddc 2023_11_22]$ git config user.email 123@qq.com
[ycm@hcss-ecs-3ddc 2023_11_22]$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.name=ycm
user.email=123@qq.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)。

  • 版本库:又叫仓库,工作区有一个隐藏目录.git,它不算工作区,而是Git的版本库。这个版本库里面所有的文件都可以被Git管理起来,每个文件的修改、删除,Git都可能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

    下图展示了工作区、暂存区和版本库之间的关系:

工作区、暂存区、版本库

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

  • 在创建 Git 版本库时,Git 会为我们⾃动创建⼀个唯⼀的 master 分⽀,以及指向 master 的⼀个指针叫 HEAD。(分⽀和HEAD的概念后⾯再说)

  • 当对⼯作区修改(或新增)的⽂件执⾏ git add 命令时,暂存区⽬录树的⽂件索引会被更新。

  • 当执⾏提交操作 git commit 时,master 分⽀会做相应的更新,可以简单理解为暂存区的⽬录树才会被真正写到版本库中。

由上述描述我们便能得知:通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件。必须要通过使⽤ git add git commit 命令才能将⽂件添加到仓库中进⾏管理!!!

添加文件实例一

在包含 .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,由⽤⼾⾃⼰完成,这部分内容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给我们⼈看的。

例如:

[ycm@hcss-ecs-3ddc 2023_11_22]$ touch ReadMe
[ycm@hcss-ecs-3ddc 2023_11_22]$ vim ReadMe 
[ycm@hcss-ecs-3ddc 2023_11_22]$ cat ReadMe 
#include<stdio.h>
int main()
{
  printf("hello Git\n");
  return 0;
}
[ycm@hcss-ecs-3ddc 2023_11_22]$ git add ReadMe 
[ycm@hcss-ecs-3ddc 2023_11_22]$ git commit -m "commit my first file"
[master (root-commit) 67c1444] commit my first file
 1 file changed, 6 insertions(+)
 create mode 100644 ReadMe

git commit 命令执⾏成功后会告诉我们,1个⽂件被改动(就是我们新添加的ReadMe⽂件),插⼊了两⾏内容(ReadMe有两⾏内容)。

我们还可以多次 add 不同的⽂件,⽽只 commit ⼀次便可以提交所有⽂件,是因为需要提交的⽂件是通通被 add 到暂存区中,然后⼀次性 commit 暂存区的所有修改。如:

[ycm@hcss-ecs-3ddc 2023_11_22]$ touch file1 file2 file3 file4 file5 
[ycm@hcss-ecs-3ddc 2023_11_22]$ git add file1 file2
[ycm@hcss-ecs-3ddc 2023_11_22]$ git add file3 file4 file5
[ycm@hcss-ecs-3ddc 2023_11_22]$ git commit -m "add 5 files"
[master efccdbd] add 5 files
 5 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1
 create mode 100644 file2
 create mode 100644 file3
 create mode 100644 file4
 create mode 100644 file5

截止目前为止,我们已经可以将代码提交到本地仓库了。现在我们可以使用git log命令来查看历史提交记录:

[ycm@hcss-ecs-3ddc 2023_11_22]$ git log
commit efccdbd877c0323c3752f02d31fbc7da5ef2ad77
Author: ycm <123@qq.com>
Date:   Wed Nov 22 00:48:01 2023 +0800

    add 5 files

commit 67c1444e499f63a4475128ca84f5849c80abe7b1
Author: ycm <123@qq.com>
Date:   Wed Nov 22 00:43:34 2023 +0800

    commit my first file

如果嫌输出消息太多,可以试试加上--pretty=oneline参数:

[ycm@hcss-ecs-3ddc 2023_11_22]$ git log --pretty=oneline
efccdbd877c0323c3752f02d31fbc7da5ef2ad77 add 5 files
67c1444e499f63a4475128ca84f5849c80abe7b1 commit my first file

需要说明的是,我们看到一大串类似于efccdbd8…a5ef2ad77的是每次提交的commit id(版本号),Git 的 commit id 不是1,2,3……递增的数字,⽽是⼀个 SHA1 计算出来的⼀个⾮常⼤的数字,⽤⼗六进制表⽰(你看到的 commit id 和我的肯定不⼀样,以你⾃⼰的为准)。

添加文件实例二

学习到这⾥,我们已经清楚了如何向仓库中添加⽂件,并且对于⼯作区、暂存区、版本库也有了⼀定的认识。那么我们再展⽰⼀种添加⽂件的场景,能加深对⼯作区、暂存区、版本库的理解,⽰例如下:

[ycm@hcss-ecs-3ddc 2023_11_22]$ touch file6
[ycm@hcss-ecs-3ddc 2023_11_22]$ git add file6
[ycm@hcss-ecs-3ddc 2023_11_22]$ touch file7
[ycm@hcss-ecs-3ddc 2023_11_22]$ git commit -m "add file"
[master c148d17] add file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file6

提交后发现打印了 1 file changed, 0 insertions(+), 0 deletions(-) ,意思是只有⼀个⽂件改变了,这时我们提出了疑问,不是新增了两个⽂件吗?再来回忆下,git add 是将⽂件添加到暂存区, git commit 是将暂存区的内容添加到本地仓库中。由于我们并没有使⽤ git add file5 ,file5 就不在暂存区中维护,所以我们 commit 的时候其实只是把已经在暂存区的 file4 提交了,⽽遗漏了⼯作区的 file5。如何提交 file5 呢?很简单,再次add , commit 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自然语言编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值