Git基础概念

三块区域

工作区、缓存区、本地仓库

  1. 工作区:当前的.git所在文件夹就是工作区
  2. 缓存区:经过git add的文件都会进入缓存区
  3. 仓库:经过git commit的文件会进入仓库

四种状态

未跟踪(Untrack)、未修改(Unmodified)、已修改(Modified)、已暂存(Staged)

  1. 新建的文件:untrack
  2. 对untrack的文件进行add:staged
  3. 对staged的文件进行commit:unmodified
  4. 对unmodified的文件进行add:staged

Git基础操作

git -v

使用git -v来查看当前git的版本,可以用来确认当前设备是否安装了git

git config

  1. git config --global user.name 'username' 配置用户名
  2. git config --global user.email 'useremail@mail.com' 配置邮箱
  3. git config --global --list 查看git的配置信息,可以看到用户名邮箱等

git init

使用 git init在当前目录创建git仓库,会在当前目录下创建一个.git的文件夹

使用git init <filename>在当前目录下新建一个叫filename的文件夹并将其设为一个git仓库,filename下会有一个.git的文件夹

git status

使用git status来查看当前仓库的状态

返回:

  1. 当前所在的分支
  2. commit的文件
  3. add的文件

git add <filename>

ni file1.txt来创建file1.txtni指new item,也可以用New-Item file1.txt
dir来查看当前文件夹的信息,dir指dictionary

  1. git add file1.txtfile1.txt 添加到缓存区
  2. git add *.txt 将当前目录下所有.txt的文件保存到缓存区
  3. git add .将当前目录下所有文件保存到缓存区

git commit

powershell及大部分其他命令提示符中,单引号是字面量字符串,双引号会解析一下里边的内容

  1. git commit -m '<注释>’ 其中<注释>可以写版本变动说明
  2. git commit 不加-m的话会呼出文本编辑器来写版本变动说明

git log

使用git log来查看提交(commit)的记录

提交记录中,含有提交的时间提交的人唯一的commit ID

使用git log --oneline 查看简洁的提交记录

git reflog

使用git reflog来查看操作历史

git reset

commit ID可以使用git loggit log --oneline查看,简洁版和完全版都行

  1. git reset --soft <commit ID> 表示回退到某一个版本,并保存工作区和暂存区的所有内容
  2. git reset --hard <commit ID> 表示回退到某一个版本,并丢弃工作区和暂存区的所有内容
  3. git reset --soft <commit ID> 表示回退到某一个版本,保存工作区的内容,丢弃暂存区的内容,--mixed也是git reset的默认参数

git diff

  1. 使用git diff查看工作区有变动的地方

  2. 使用git diff HEAD查看工作区与仓库之间的差异

  3. 使用git diff --cached查看暂存区与仓库之间的差异

  4. 使用git diff <commit ID1> <commit ID2>查看两个版本库之间的差异,一般将较新的放ID2

HEAD~HEAD^表示上一个版本,用HEAD~2表示前两个版本

  1. 使用git diff HEAD~ HEAD比较当前版本与上个版本的差异

  2. 使用git diff HEAD~ HEAD file3.txt比较当前版本与上个版本的file3.txt的差异

git rm

输入git rm --cached file1.txtfile1.txt文件从缓存区中移除,rm指remove

若不加--cached,git不但会将文件移除缓存区,还会将该文件删除

git ls-files

使用git ls-files来查看被git追踪的所有文件

.gitignore

.gitignore用于忽略git要管理的文件,需要在里面写入要忽略的文件名

.gitignore需要使用utf8格式编码

使用*.log的语法忽略全部.log后缀的文件

如果一个文件已经在暂存区中存在,而后被写入.gitignore,那么这个文件仍然会被git管理,不会被忽略,此时需要使用git rm --cached来移除暂存区

使用temp/的语法忽略temp文件夹

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 忽略.a后缀的文件
.a

# 但不忽略lib.a
!lib.a

# 忽略当前文件夹下的TODO文件,而不忽略 today/TODO
# 这个斜线表示根目录
/TODO

# 忽略任何目录下名为build的文件夹
build/

# 忽略 doc/notes.txt 但不忽略doc/server/arc.txt
doc/*.txt

# 忽略doc/目录及其所有子目录下的.pdf
doc/**/*.pdf


git push

本地->远程

git pull

远程->本地


VS Code中的Git

文件状态

  1. ?? 或 U(Untracked) : 未跟踪
  2. M(Modified) : 已修改
  3. A(Added) : 已添加
  4. D(Deleted) : 已删除
  5. R(Renamed) : 已重命名
  6. U(Updated) : 已更新未合并