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来查看状态,里面会有提示