文章目录
- status
- add
- commit
- diff
- reset
- restore
前言
本文通过操作演示,使得第一次接触git的朋友,能够熟悉git的基本操作
1.status
功能:Show the working tree status;主要显示工作区的状态,比如文件有没有被git跟踪;文件有没有更新;有没有添加到暂存区;有没有提交到本地仓库
2.add
git-add - Add file contents to the index
功能:添加文件内容到暂存区
实例1:创建一个文件add_study.c文件,输入内容“//study add cmd”
从上图可以看到未添加到暂存区的文件add_study.c是红色的,执行add . 命令后详见下图可以看到add_study.c已经添加到暂存区了,其有红色变成绿色了。
注:一般使用git add .就会将本地已经修改文件添加到暂存区;如果只是想添加有限个文件到暂存区可以使用类似git add file1 file2方法,就可以将file1 file2添加到暂存区。
总结:通过上述操作,可以看到通过add命令可以将本地修改文件添加到暂存区。
3.commit
功能:Record changes to the repository;暂存区修改内容提交到本地仓库通过上述命令git commit -m 可以实现将暂存区文件提交到本地仓库,通过git log可以查看到提交日志
4.diff
功能:Show changes between commits, commit and working tree, etc; 显示提交记录之间的差异;显示提交和暂存区之间的差异;显示暂存区和工作区间的差异
(1)显示暂存区和工作区间的差异
Git diff [file]
版本库已经存在diff_study.c文件,其中增加内容“1:test work area and stage diff”,但是不添加到暂存区。执行git diff之后显示结果如下图,其显示出了修改前后的差异,下面对git diff之后的输出做下说明:
第一行:表明为git格式的diff,表明a,b两个版本下文件的差异
第二行:标明a和b两个版本的哈希值;100644标示文件权限
第三,四行:分别表示文件修改前后的版本;---表示修改前的版本,++表示修改后的版本
第五行:-1,表示修改前的内容起始行号为1,一共一行
+1,3,表示修改后的内容起起始行号为1,一共连续3行
第六行:修改前的内容一共一行
第七行:忽略
第八,九,十行:修改后的内容一共三行
总结:通过该命令可以查看,工作区和暂存区内容差异,并且显示出文件差异部分,并给出行号。
(2) 显示暂存区和上次提交的差异
git diff --staged [file]
继上一次操作后,执行该命令发现此时没有任何差异,原因是没有添加到暂存区。
下面提交后,再执行该命令后,会发现暂存区和上一次提交存在差异,差异部分和前面的一样。
(3)显示两次提交的差异
git diff [first-commit_id]...[second-commit_id]
通过git log查看最后两次提交的commit id,然后通过该命令查看差异,结果见下图
5.reset
功能:Reset current HEAD to the specified state; head指针指向指定的地方
语法:git reset [--soft | --mixed | --hard] [commit id]
应用场景:本地开发中,发现已经提交的内容有错(或想丢弃),此时可以通过该命令将上述内容移除;出错的位置可能在本地仓库,可能在暂存区,可能在工作区,所以git语法提供了上述语法来解决。
验证环境准备:首先创建reset_test.txt,并进行了三次提交,”forth commit//添加到缓存区”只是被添加到缓存区,还没提交,“forth commit1//在工作区,未添加到暂存区”在工作区,未添加到暂存区详见下图
(1)--soft 本地仓库区的内容和commit id中仓库内容一致,暂存区和工作区中内容保持不变;原节点和reset节点之间的差异集合会(即原来的commit提交)放入暂存区中。
应用场景:本地开发中在保证内容不丢失的情况下,实现commit的合并。
通过下图的方法来验证这个case,步骤(1)可以发现工作区中内容没有发生变化;步骤(2)发现此时头结点指向的是第2次提交,说明和reset -- soft的预期基本是一致的,但是还没有证明暂存区内容不变。
通过步骤3,git checkout . 表示暂存区内容恢复到工作区,通过反馈发现此时暂存区和工作区内容是一致的,“forth commit1//在工作区,未添加到暂存区”丢失了。
最后对当前内容重新提交一到本地,通过下图可以看到third commit的提交记录就不见了,看到新的提交变成最后一次的提交。
(2)--mixed,reset后不带参数的话,默认就是这个指令,会将暂存区,本地仓库区的内容和commit id中仓库内容一致,工作区内容保持不变,但是原节点和reset节点之间的差异集合会(即原来的commit提交)会放到工作区中。
应用场景:假设代码提交了3次,第1,3次提交有问题,第2次提交有误,所以通过这个选项可以统一将之前commit的代码回退到工作区,进行统一处理,修复完毕后,经过add后再提交即可。
示例:略
(3)--hard,这个指令处理的很彻底,会将工作区,暂存区,本地仓库区的内容和commit id中仓库内容一致;原节点和reset节点之间的差异集合会(即原来的commit提交)会丢失,工作区中的内容也会丢失。
示例:略
6.restore
功能:Restore working tree files;恢复工作区中的文件
应用场景:工作区中的文件恢复;暂存区中的文恢复;工作区和暂存区中的文件恢复
(1)工作区中的文件恢复(从暂存区恢复到工作区) git restore --worktree <file>(和git restore <file>等价)
(2)暂存区中的文件恢复(从版本库恢复到暂存区,工作区中内容保持不变)
git restore --worktree <file>
(3)从某个提交节点中恢复暂存区和工作区中内容
git restore --source=HEAD --staged --worktree <file>
通过本文基本可以实现项目中git的基本操作了