1. Git 的安装
2. 初次运行Git前的配置
csharp
git config --global user.name 'your name' # 全局配置用户名
git config --global user.email 'your email' # 全局配置用户邮箱
3. 系统通用配置
在Git安装目录下的/etc/gitconfig文件中,包了含系统上每一个用户及他们仓库的通用配置。
在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量
Git 安装目录,可以执行where git来找到
4. 初始化Git本地仓库
csharp
git init # 初始化Git本地仓库
5. Git三大区域

6. 如何生成项目版本
git status用来查看项目文件状态git add命令,用来将工作区代码的变动,提交到暂存区
git
git add <file> <file> # 提交指定的文件到暂存区
git add . # 将工作区所有变动提交到暂存区
git commit命令,用来将暂存区的内容提交到本地仓库,git commit后暂存区和本地版本库的内容是一致的
bash
git commit # 提交,最终在编辑器中输入提交的描述
git commit -m '提交描述' # 在提交的同时,添加本次提交描述
git log查看提交历史记录
bash
git log # 打印详细的提交历史记录
git log --oneline # 以列表形式,打印提交的历史记录(简化版)
6.1、文件的三种状态
被 Git 管理的项目,项目文件可能处于以下 3 种状态之一
- 已修改(modified) :表示上次提交后,重新修改了的文件,但还没提交到暂存区
- 已暂存(staged) :表示对一个已修改的文件提交到了暂存区,但还没有提交
- 已提交(committed) :表示文件已提交到本地仓库
7. 撤消操作 Git 官方文档 - 撤消操作
主要有以下三种场景:
- 撤消上一次提交
- 撤销暂存的文件
- 撤销撤销件的修改
7.1 撤消上一次提交
7.1.1 提交完了才发现提交信息写错了
sql
git commit --amend # 撤消上一次提交
这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。
7.1.2 提交后发现忘记了暂存某些需要的修改
- 重新执行
git add命令将修改内容添加到暂存区 - 然后再重新提交,但提交时不希望生成新的版本
sql
git commit -m 'V1-网站头部' # 生成一个版本V1 第一次错误提交
git add . # 将修改的内容提交到暂存区
#提交生成一个新的版本V2,该版本会替换之前的那个版本,所以最终用 git log --oneline只能看到最后一次生成的版本V2
git commit -m 'V1-网站头部导航开发完成' --amend
7.2 撤销暂存的文件
如果修改了两个文件并且想要将它们作为分开两次独立的修改提交 , 但是却意外地输入 git add * 暂存了它们两个。
- 使用
git restore --staged <file>...来取消暂存。
bash
git restore --staged login.html # 取消login.html文件的暂存
git restore --staged . # 取消暂存区所有文件的暂存
注意:
git restore --staged <file>命令只会将文件从暂存区移动到工作并且并会不会影响工作区该文件的内容。- 比如文件提交到暂存区时,文件内容为:
'a',后面将文件内容修改为-'ab',然后执行git restore --staged <file>将文件从暂存区移除,此时工作区该文件内容仍为'ab',并不会被修改为'a'
7.3 取消对文件的修改
如果你在上一次git add后 ,对文件login.html内容做了修改,但现在你想去掉这些修改,回到上一次git add时的样式。那你就需要撤销对login.html内容的修改。
bash
git restore . # 撤消对工作工所有文件的修改
8. 版本重置
Git 版本重置分为以下三种情况
- 只重置本地仓库
- 重置本地仓库和暂存区
- 重置本地仓库、暂存区和工作区
8.1 重置本地仓库 (--soft)
perl
git reset --soft 版本号 # 重置本地仓库
8.2 重置本地仓库与暂存区 (--mixed)
perl
git reset --mixed 版本号 # 重置本地仓库和暂存区
git reset 版本号 # 重置本地仓库和暂存区,默认行为
8.3 重置本地库、暂存区、工作区(--hard)
注意:
--hard会重置工作区内容,所以在重置前如果工作区内容有没有提交的,重置后则会造成内容丢失。内容一旦丢失,是没有办法找回的。
所以使用--hard 命令时,要特别小心。
css
git reset --hard 版本号
8.4 git reflog 命令
git reflog命令,是可以查看到所有的版本历史记录,包括我们之前认为被 "丢弃" 的版本。
9. Git 忽略文件(.gitignore 文件)
文件
.gitignore的格式规范如下:
- 所有空行或者以
#开头的行都会被 Git 忽略。 #为.gitignore文件的注释
bash
# 注释
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。 注:所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
- 星号(
*)匹配零个或多个任意字符;[abc]匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);- 问号(
?)只匹配一个任意字符;- 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如
[0-9]表示匹配所有 0 到 9 的数字)。- 使用两个星号
**表示匹配任意中间目录,比如a/**/z可以匹配a/z、a/b/z或a/b/c/z等。
shell
# 忽略所有以text.开头的文件,不需Git管理
text.*
# Git 忽略所有以 .o 或 .a 结尾的文件
*.[oa]
# Git忽略以 a.tmp 或b.tmp等 .tmp前面只有一个字符的tmp文件
?.tmp
# 只忽略 doc的直接子目录下的任意pdf文件,比如:doc/a.b.pdf,但不能忽略doc/a/b/c.pdf
doc/*/*.pdf
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件 如 doc/a/b.pdf doc/a/b/c.pdf
doc/**/*.pdf
- 匹配模式可以以(
/)开头防止递归。
shell
# 只忽略当前目录下的 demo.txt 文件,而不忽略 case/demo.txt
/demo.txt
# 忽略当前项目中所有 demo.txt文件
demo.txt
- 匹配模式可以以(
/)结尾指定目录。
bash
# 忽略 任何目录下名为 node_modules目录下的所有文件 (git管理的是文件不是目录,所以该文件下要有内容,否则会自动忽略)
node_modules/
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(
!)取反。
arduino
test.* # 忽略所有以text.开头的文件,不需Git管理
!text.html # 不忽略text.html文件,让Git管理