git基本操作

目录

创建git本地仓库

配置Git

管理流程

版本控制

提交操作

修改文件

版本回退

版本回退场景

回退速度

删除文件


创建git本地仓库

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

创建git本地仓库的对应命令:git init(命令要在文件目录下执行)

:~/gitcode$ pwd

/home/zhz/gitcode

:~/gitcode$ git init

Initialized empty Git repository in /home/zhz/gitcode/.git/

:~/gitcode$ ll -a

total 12

drwxrwxr-x 3 zhz zhz 4096 Jun 7 17:49 ./

drwxr-xr-x 13 zhz zhz 4096 Jun 7 17:47 ../

drwxrwxr-x 7 zhz zhz 4096 Jun 7 17:49 .git/

我们发现:目录下多了一个.git隐藏目录,.git是目录Git用来跟踪管理仓库的,尽量不要手动修改里面的文件,不然可能会破坏仓库

配置Git

当安装Git后首先要做的事情就是配置你的用户名称email地址,这是非常重要的

git config [--global] user.name "Your Name"

git config [--global] user.email "[email protected]"

其中,--global是可选项,如果使用了该选项,表示这台机器上所有Git仓库都会使用这个配置,如果你希望在不同仓库中使用不同的name或email,就不要带--global选项,

注意:执行命令时必须要在仓库里

查看配置的命令:

git config -l

删除配置的命令:

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

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

管理流程

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

暂存区:index,一般存放在.git目录下的index文件中,也可以叫做索引。

版本库:仓库,就是那个隐藏目录.git,它不算工作区,是Git的版本库,这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能追踪,随时可以追踪历史,也可以复原

下面这张图展示了三者直接的关系:

git基本操作_第1张图片

 当我们修改工作区并add后,会把工作区所有的修改内容添加到版本库的暂存区(stage)中,

但是这还不算把工作区内容真正意义上写入版本库

所以还要进行commit操作

commit会把暂存区的内容提交到master分支下

走了这两步之后才算是把工作区内容真正意义上添加到版本库中,也就是让Git管理工作区文件

版本控制

版本控制是如何做到的呢?

当我们add操作的时候,会将工作区修改的内容 写入到git对象中,而git对象会被维护到对象库(objects)中。

所以暂存区和master中都只会存入git对象的索引

所以我们只要拿到HEAD指针,就能找到master,就能找到某一个文件具体修改的内容,就可以管控一个具体的文件了。

提交操作

首先需要一个新文件:

[az@VM-8-7-centos gitcode]$ touch README
[az@VM-8-7-centos gitcode]$ vim README 
[az@VM-8-7-centos gitcode]$ cat README
hello world

然后就是第一步add操作,把README文件添加到暂存区中。

(也可以 git add . 表示添加当前目录下的所有文件)

[az@VM-8-7-centos gitcode]$ git add README

然后第二部commit操作,把暂存区的文件添加到master中

(-m选项必须有,后面的内容是对这次添加内容的说明)

[az@VM-8-7-centos gitcode]$ git commit -m "add first file"
[master (root-commit) c0b9d78] add first file
 1 file changed, 2 insertions(+)
 create mode 100644 README

日志查询:

因为只进行了一次commit 操作,所以只能查到一条,但实际上git log 是可以查询到历史所有提交信息的

git基本操作_第2张图片

 当然也可以用git log --pretty=oneline按行来显示信息

 

修改文件

git跟踪并管理的是修改,不是文件

当我们修改完文件后,不记得有没有提交过

可以使用git status <文件名> 来查看你上次提交后是否对文件再次修改

:~/gitcode$ git status
On branch master
Changes not staged for commit:
 (use "git add ..." to update what will be committed)
 (use "git restore ..." to discard changes in working directory)
 modified: ReadMe
no changes added to commit (use "git add" and/or "git commit -a")

上面的结果告诉我们,ReadMe被修改过了,但还没有完成添加和提交

但是,到现在,我们只知道文件被修改了,但是不知道哪里被修改了

这时候就可以使用git diff <文件名> 

用来显示暂存区和工作区文件的差异

:~/gitcode$ git diff ReadMe
diff --git a/ReadMe b/ReadMe
index 9c9e1f0..4a97140 100644
--- a/ReadMe
+++ b/ReadMe
@@ -1,2 +1,3 @@
 hello bit
-hello bit
+hello git
+hello world

-表示改动前,+表示改动后

现在我们知道对ReadMe做了什么修改后,就可以放心地把它提交给本地仓库了

版本回退

git reset [--soft | --mixed | --hard] [HEAD] 

本质是回退版本库的内容

而工作区和暂存区的内容取决于reset 的选项

--mixed : (默认选项)该参数将暂存区的内容回退为指定提交版本内容,工作区文件保持不变。

--soft : 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本

--hard : 参数将暂存区和工作区的内容都回退到指定版本,切记工作区有未提交的代码时不要使用这个选项,因为工作区会回滚,你没有提交的代码就永远也找不回了(慎用)

head : 可以直接写成commit id ,表示回退到指定版本

HEAD     表示当前版本

HEAD^   上一个版本

HEAD^^  上上个版本

也可以使用数字替代

HEAD~1 上⼀个版本

HEAD~2 上上⼀个版本

以此类推

 通过表格理解(老版本:git    新版本:git world)

git基本操作_第3张图片

 版本回退也可以反悔的:

通过git reflog 命令可以查看所有历史命令(包括版本回退)

查到commit id 后再使用git reset --hard id 就可以了

但是如果年代久远,查不到commit id 就没办法了

版本回退场景

场景1:还没有add操作

场景2:add后还没有commit操作

场景3:add、commit后,还没有push(提交到远程仓库)

git基本操作_第4张图片

 注:checkout 后必须加--

回退速度

Git的版本回退速度非常快,因为Git在内部有个指向当前分支(master)的HEAD指针

refs/heads/master文件里保存当前master分支的最新commit id

当我们版本回退的时候,Git只是给master文件中存储一个特定的version

git基本操作_第5张图片

删除文件

正常删除文件的时候,先rm,然后同样需要add和commit操作来提交删除操作

但是git给我们提供了git rm命令

这个命令既会删除工作区的文件,也会在删除暂存区里的内容,

然后只需要再commit操作就行了。

你可能感兴趣的:(git,git,github)