Git-02-文件状态的转换

git三种状态(个人理解:四种)

工作区的文件:unstaged

暂存区的文件:staged

对象区的文件:commited

(已管理)(在git的目录中,有些文件是没有被git管理的)
已修改(modified) (存放在工作区,尚未add到暂存区)
已暂存(staged)          (已add,尚未commit)
已提交(commited)     (已commit)

状态的切换

将某个目录纳入git管理: git  init  (默认master分支)

工作区   ------>  暂存区

git add hello.txt

暂存区  -------> 工作区  (撤销操作)

git rm --cached  hello.txt   (这是比较旧的命令)

现在常用的命令:git restore --staged hello.txt

暂存区  ----->  对象区

git commit -m "提交说明"    //这个命令会把当前暂存区的文件都提交到对象区

可以单独提交部分文件

git commit  a1.txt  -m "只提交a1文件"

工作区  ----> 对象区 (撤销操作)

如果某个文件 已提交 ,如a1.txt,但我们对其进行了修改,那么a1txt文件就会处于工作区中,我们可以放弃修改(使其还原到已提交状态)
git checkout -- a1.txt

删除文件操作

1)删除已提交的文件:

在bash命令窗口中执行:

git rm x   (x为文件名)

这个命令做了以下事:

删除之后 文件被放到 暂存区(在暂存区的状态是deleted)

彻底删除: git commit -m "彻底删除x" (这时会真正删除x文件)
git rm 后悔:
1.恢复到工作区git reset HEAD x

2.git checkout -- x

或者:

1. git restore --staged a.txt

2. git restore a.txt

操作系统删除

rm a.txt

这时要后悔:git restore a.txt

如果要彻底删除,还是要git rm a.txt,然后git commit -m "彻底删除a.txt"

2)删除在暂存区的文件

git rm b.txt

这时会出现错误,删除失败,需要使用-f参数才能删除成功

git rm -f b.txt

这时用git status查看状态,会发现b.txt不在任何一个区域中,故删除在暂存区的文件是无法后悔的。

注释重写(重写提交说明)
正规 : git commit --amend -m '修正'


忽略文件:.gitignore


通配符 :
*任意字符

*.properties  //忽略所以以.properties为后缀的文件

!b.properties //不忽略b.properties文件

dir/:  //忽略dir目录中的所有文件  

dir/*.txt  //忽略dir目录中的所有以.txt为后缀的文件  

dir/*/*.txt :   //能够忽略 dir/abc/a.txt dir/xyz/a.txt ,不能忽略 dir/xyz/123/a.txt
dir/**/*.txt :   //忽略dir子目录的任意任意级别目录下的txt文件

总结

其实若不清楚下一步要如何做,可以使用git status来查看状态,里面会有提示

原文地址:https://www.cnblogs.com/kenLoong/p/15193135.html