4、Git:文件操作
命令
git rm filename
git checkout filename
git reset HEAD filename
文件4种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
Untracked: 未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制.通过
git add
状态变为Staged
Unmodify: 文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。 这种类型的文件有两种去处,如果它被修改,而变为
Modified
。如果使用git rm
移出版本库,则成为deleted
文件,文件被删除了Modified:文件已修改,仅仅是修改,并没有进行其他的操作.这个文件也有两个去处,通过
git add
可进入暂存Staged
状态,或者 使用git checkout
则丢弃修改过, 返回到unmodify
状态,这个git checkout
即从库中取出文件,覆盖当前修改!Staged:暂存状态.执行
git commit
则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为unmodify
状态. 执行git reset HEAD filename
取消暂存,文件状态为Modified
举例测试
测试文件的四种状态,和对应的命令
git add .
文件暂存
1、没有文件的情况下
git init # 创建一个全新的本地仓库 git status # 查看所有文件状态
2、这个时候就会显示,有文件未被跟踪 Untracked
touch zxh.txt git status
3、添加到暂存区
git add zxh.txt # 添加到暂存区 git status
现在就回提示有个文件进入了暂存Staged
,需要提交
git commit -m "描述"
提交文件
4、提交文件到本地仓库
git commit -m "临时文件" git status
这个时候文件就提交上去了
git checkout 文件名
取消修改
1、我们修改一下文件内容,就会发现文件处于Modified
已修改状态,没有放到暂存区。
2、这个时候,如果我们不想修改了,可以使用git checkout zxh.txt
命令从库中取出未修改的文件,覆盖当前修改的。
git checkout zxh.txtgit status
就会发现你修改的内容被之前保存的文件覆盖了,如果修改内容后,放到了暂存区,那使用checkout命令就无法覆盖了
git reset HEAD filename
取消暂存
git status git reset HEAD zxh.txt git status
一开始文件状态是Staged
,取消暂存后,发现在暂存区的文件,已经取消了暂存,文件的状态变成了Modified
git rm filename
移除版本库
首先将文件提交到本地仓库形成了一个新的版本库
再将它移除
发现文件夹中的文件被删除了,并且状态变成了
deleted
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立 ”.gitignore“ 文件,此文件有如下规则:
忽略文件中的空行或以井号(#)开始的行 将会被忽略
可以使用Linux通配符。例如:星号(*)代表对个字符,问号( ?)代表一个字符,方括号( [abc] )代表可选字符范围,大括号( {string1,string2,...} )代表可选的字符串等。
如果名称的最前面有一个感叹号( !),表示例外规则,将不被忽略
如果名称的最前面是一个路径分隔符( / ),表示要忽略的文件在此目录下,而子目录中的文件不忽略
如果名称的最后面是一个路径分隔符( / ),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)
举例
# 为注释 logs/: # 忽略当前路径下的logs目录,包含logs下的所有子目录和文件 /logs.txt: # 忽略根目录下的logs.txt文件 *.class: # 忽略所有后缀为.class的文件 !/classes/a.class:# 不忽略classes目录下的a.class文件 tmp/*.txt: # 忽略tmp目录下的所有.txt文件 **/foo: # 忽略所有路径下的foo,比如:可以忽略/foo, a/foo, a/b/foo等
使用idea 新建SpringBoot项目,默认会生成 .gitignore 文件,spring帮我们生成好了
.gitignore文件如下:
HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/** !**/src/test/** ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ ### VS Code ### .vscode/
java通用模板
*.class *.log *.lock # Package Files # *.jar *.war *.ear target/ # idea .idea/ *.imi *velocity.log* # STS # .apt_generated .factorypath .springBeans ### InelliJ IDEA ### *.iml *.ipr *.iws .idea .classpath .project .settings/ bin/ *.log tmp/ #rebel *rebel.xml*