git 基础
下载:https://git-scm.com/downloads
git是什么?
git是一种分布式的版本管理系统,Linux的创造者写的。git的作用就是对文件进行版本管理,方便在不同版本进行切换修改,类似文件分不同时间备份让后需要时找回其中一份代替,不过更方便使用
git还可以与一些远程代码托管仓库搭配使用,比如github,gitee,使用git将你的项目托管到远程仓库,就相当于是将程序存放到了一个网盘上。
git还可以实现多人协作开发
基本使用
将目录切换到你要创建仓库的文件下,右键,就会看到一个git bash here,点击打开
Snipaste_2021-07-22_11-23-14.png
- 初次使用git
git config --global user.name "用户名"
git config --global user.email 邮箱
- 仓库初始化
git init
// 初始化成功后,会在文件夹中生成一个.git的文件,该文件默认是隐藏
- 将修改添加至暂存区
创建文件,添加内容之后
// 将一个文件中的修改提交到暂存区
git add 文件名
// 将所有文件中的修改提交到暂存区
git add .
- 提交到本地
git commit -m "提交信息"
如果直接执行git commit命令,git会弹出一个vim的编辑窗口
Snipaste_2021-06-25_17-37-29.png
也就说提交信息是一定要有的,否则提交失败。vim编辑窗口的使用方法就是,先按“i”/“a”/“o”三个其中的一个,进入编辑环境,输入完成你的提交信息之后,按“Esc”键退出编辑环境,在输入“:w”回车以确认输入,再输入“:q”回车,退出vim编辑窗口,输入的命令必须都是英文的,否则失效
- 查看提交的历史记录
git log
.git目录分析
有“\”代表是文件夹
hooks\
info\
logs\
objects\
refs\
COMMIT_EDITMSG
config
description
HEAD
index
- hooks
文件包含客户端或者服务端的脚本钩子,在特定情况下执行。打个比方,就相当于是js的事件,执行对应的事件从而执行对应的事件函数 - info 信息文件夹
里面就一个exclude文件,包含全局性排除排除文件,通常会在项目的根目录下创建一个.gitignore文件配置忽略文件名称。
比如说我们在项目完成之后进行打包,生成dist文件夹,不希望git去跟踪它里面的文件变化,就可以在.gitignore文件中写一个dist,这样git就不会跟踪了。忽略文件要写后缀名
// .gitignore
dist
index.css
-
logs 记录文件夹
- 里面有一个HEAD文件,里面记录了我们的提交历史
- refs文件夹中主要记录的是分支的一些提交信息,在开发中,可能会存在多个分支
-
objects是整个文件夹的仓库目录
我们文件内容的修改,被追踪文件的状态等,都在该文件夹中 -
refs分支信息
-
COMMIT_EDITMSG 记录了我们最后一次提交的文字说明
-
config 当前文件的配置信息
-
description描述
-
HEAD 当前分支的路径
ref: refs/heads/master
默认是在master主分支上
-
index 暂存区文件
将修改的内容提交到暂存区实际上就是提交到index文件中,二进制文件,无法查看
版本库的三个区
初始化版本库:git init,这样就生成了一个仓库,每一个仓库都有三个区域:工作区(代码编辑区),暂存区(修改待提交区),仓库区(代码保存区)
- 工作区实际上就是项目文件夹中的文件
- 暂存区:就是在上面讲到.git文件夹中的index文件
查看暂存区中有哪些文件:git ls-files - 仓库区:就是.git文件夹中的objects文件夹
这之间的顺序就是要先在工作区编辑好内容,然后才能提交到暂存区,最后再commit存档到仓库区
查看版本库的状态
git status
- 执行命令之后,若返回的结果是" nothing to commit, working tree clean ",表明工作区现在没有修改,工作区是干净的
- 假如新增一个index.html文件,再查看一下版本库状态,返回的结果就是当前仓库中还没有被跟踪的文件,提示你使用git add 文件名命令,将未跟踪的文件添加到暂存区
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
然后提交到暂存区,git add index.html
再查看一下版本库的状态git status
// 还没有提交
No commits yet
// 下面修改将会提交
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html
使用git commit -m "test " 提交到仓库区,再查看仓库状态,就反馈到了工作区是干净的,此时对index.html随便添加一点东西,再查看一下仓库状态
// 没有提交到暂存区的更改
Changes not staged for commit:
// 添加到暂存区
(use "git add <file>..." to update what will be committed)
// 放弃修改
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
这里就出现了一个放弃修改的命令,就是将程序还原到上一次提交的时候
// 放弃某一个的修改
git restore 文件名
// 放弃此次所有的修改
git restore .
- 删除文件
在项目目录下,创建一个index.html文件,输入内容,并git add index.html,和git commit -m "test"之后,查看一下文件列表git ls-files,打印结果肯定是只有一个index.html文件,现在我们在编辑器中删除这个index.html文件,然后再git ls-files,你会发现index.html依然存在,也就是你在编辑器里面删了,但是暂存区还没有删掉,此时查看版本库的状态
// 查看版本库的状态
$ git status
On branch master
Changes not staged for commit:
/**
* 使用git add 文件名
* 或者使用
* git rm 文件名
* 可以将文件名添加到暂存区
*/
(use "git add/rm <file>..." to update what will be committed)
// 这里的git restore <file>就可以理解为是还原文件,撤销对文件的删除,恢复文件
(use "git restore <file>..." to discard changes in working directory)
deleted: index.html
no changes added to commit (use "git add" and/or "git commit -a")
- 总结
因为代码块的原因,上面无法正常显示出git给我们反馈的颜色,这里做一个总结
执行git status命令之后
git反馈颜色 | 传达的意思 |
---|---|
红色 | 说明此修改只存在于工作区 |
绿色 | 说明此修改只存在于工作区和缓存区 |
查看差异
- git diff 命令,查看工作区和暂存区的差异,显示工作区较暂存区做了哪些修改,但是不会显示文件的增删
新建一个仓库
git init
创建一个文件1.txt,随便输入123,添加暂存区,提交
git add 1.txt
git commit -m "test"
然后在1.txt文件中添加一些内容:哈哈哈哈哈哈哈哈哈
此时工作区做了修改,但是没有提交暂存区,git diff查看工作区和暂存区的差异
git diff
git的反馈信息就是
diff --git a/1.txt b/1.txt
index d800886..da194ec 100644
--- a/1.txt
+++ b/1.txt
@@ -1 +1,2 @@
-123
\ No newline at end of file
+123
+哈哈哈哈哈哈哈哈哈
\ No newline at end of file