1.文件的四种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,
而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件 - Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git
add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git
checkout即从库中取出文件, 覆盖当前修改 ! - Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致,
文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
2.基本操作
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
# 添加所有文件到暂存区
git add .
#提交暂存区中的内容到本地仓库 -m 提交信息
git commit -m "消息内容"
demo
XHAI@DESKTOP-GMUEQ3J MINGW64 /d/gitCode/fileState
$ git init
Initialized empty Git repository in D:/gitCode/fileState/.git/
XHAI@DESKTOP-GMUEQ3J MINGW64 /d/gitCode/fileState (master)
$ touch test.c
XHAI@DESKTOP-GMUEQ3J MINGW64 /d/gitCode/fileState (master)
$ git status test.c
此时文件没有加入git库,需要使用命令git add .将文件所有文件加入库中
执行git commit则将修改同步到库中
方法1:git commit -m "你想添加的信息内容
XHAI@DESKTOP-GMUEQ3J MINGW64 /d/gitCode/fileState (master)
$ git commit -m "new file test.c"
[master (root-commit) ba9698c] new file test.c
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.c
方法2:git commit,执行之后,会跳出一个界面,你可以往里面添加你所需要的内容(我安装时默认选择的是notepad++编辑器,所以跳出的界面是这个)
编辑完描述信息之后就能保存退出啦
XHAI@DESKTOP-GMUEQ3J MINGW64 /d/gitCode/setName_Email (master)
$ git commit
[master (root-commit) 37af7f9] My first commit. new file good.c
1 file changed, 3 insertions(+)
create mode 100644 test.c
版本的前进与后退
1.查看历史记录
git log
当修改的文件过多时,使用该命令的话,一页显示不完,得分页显示,十分不美观。使用下面这条命令可以解决这个办法
多屏显示控制方式:空格向下翻页 、b向上翻页、q退出
git log --pretty=oneline
也可以省略pretty
git log --oneline //只显示HEAD后面的
git reflog //显示移动的步数
HEAD@{移动到当前版本需要的步数}
2. 前进或者后退当前的版本(通过移动HADE指针实现)
2.1 基于索引值前进后退
git reset --hard [局部索引值]
$ git reset --hard 4f7d2cc
2.2 基于^符号(只能够后退)
git reset --hard HEAD^ //后面跟着几个^就后退几步
2.3 基于~符号(只能后退)
git reset --hard HEAD~3 //后面~符号后面的数字是多少就后退多少步
2.4 通过命令git help reset 查看reset的其他参数
- –soft参数:仅仅在本地库移动HEAD指针(不会修改本地文件)
- –mixed参数:在本地库移动HEAD指针,重置暂存区(不会修改本地文件)
- –hard参数:在本地库移动HEAD指针、重置暂存区、重置工作区。
永久删除文件后找回
删除文件
rm test2.c
查看被删除文件的状态
$ git status test2.c
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: test2.c
no changes added to commit (use "git add" and/or "git commit -a")
通过(use “git add/rm …” to update what will be committed)这一个信息可以知道可以输入git add test2.c找回被删除的文件
找回之后上传本地库
XHAI@DESKTOP-GMUEQ3J MINGW64 /d/gitCode/setName_Email (master)
$ git commit -m "delate after" test2.c
[master 6d69834] delate after
1 file changed, 2 deletions(-)
delete mode 100644 test2.c
通过查找发现,删除的文件并没有从本地库删除。
添加到暂存区的删除文件找回
test3.c已经上传至本地库
接下来删除它
rm test3.c
只将test3.c添加值暂缓区
git add test3.c
查看此时的文件状态
通过命令git reset --hard HEAD找回文件
XHAI@DESKTOP-GMUEQ3J MINGW64 /d/gitCode/setName_Email (master)
$ git reset --hard HEAD
HEAD is now at 533a77a delate before test3
总结:删除文件并找回
前提:删除前,文件已经提交到了本地库
操作:git reset --hard [指针位置]
- 删除操作已经提交到本地库:指针位置指向历史记录
- 删除操作尚未提交到本地库:指针位置使用HEAD
比较文件差异
git diff [文件名]
将工作区中的文件和暂存区进行比较
git diff [本地库中的历史版本] [文件名]
将工作区中的文件和本地库历史记录比较
git diff
不带文件名比较多个文件