#### 删除文件
直接在工作区删除,对暂存区和版本库没有任何影响。本地删除如果要反映在暂存区中应该用git rm命令,对不想删除的文件执行git checkout -- <file>,可以让文件在工作区重现。用git rm命令执行删除后,删除动作加入了暂存区,这时执行提交动作就从真正意义上执行了文件删除,不过文件只是在版本库的最新提交中被删除了,在历史提交中尚在。
$ git add -u 将本地有改动(包括修改和删除)的文件标记到暂存区。
#### 恢复删除的文件
~~~
$ git cat-file -p HEAD^:test.txt > test.txt 从前一提交中恢复test.txt文件
$ git show HEAD^:test.txt > test.txt 效果相同
$ git checkout HEAD^ -- test.txt 也可以
$ git add -A 将工作区的所有改动及新增文件添加到暂存区
~~~
然后执行commit操作,则文件被恢复
#### 移动文件(改名操作)
改名操作相当于对旧文件执行删除,对新文件执行添加,git mv可以由git rm和git add两条命令取代
$ git mv oldname newname 完成改名操作
#### 查看版本号
$ git describe 查看当前版本号
git log命令的--decorate参数可以在提交ID的旁边显示该提交关联的引用(里程碑或分支)
#### 选择性添加文件
$ git add -i可以进入一个交互式界面操作
文件忽略功能
若把编译的目标文件及其他临时文件加入版本库中,浪费存储空间不说,甚至还会造成冲突。
可以创建一个.gitignore文件,其作用范围是所处目录及其子目录,编辑好要忽略的文件,然后添加到版本库中。如果不希望添加到库里,也不希望.gitignore文件带来干扰,可以在忽略文件中忽略自己。
被忽略以后,只有使用git status命令的--ignore参数,才会在状态显示中看到被忽略的文件。添加时git add -A和git add .都失效,只有在添加操作的命令行中明确写入文件名并提供-f参数才能真正添加。忽略只对未跟踪文件有效,对于已加入版本库的文件无效。
文件.gitignore设置的文件忽略是共享式的。之所以被称为“共享式”,是因为.gitignore被添加到版本库后成为了版本库的一部分,当版本库共享给他人(克隆),或者把版本库推送(PUSH)到集中式的服务器或他人的版本库时,这个忽略文件就会在他人的工作区中同样生效。相对应的是独享式,有两种方式:
第一种是针对具体版本库的,即在版本库.git目录下的一个文件.git/info/exclude来设置文件忽略;
另一种是全局的,即通过Git的配置变量core.excludesfile指定的一个忽略文件,其设置的忽略对所有本地版本库均有效。
如果文件忽略对于所有使用此版本库工作的人都有益,就通过在版本库相应目录下建一个.gitignore文件建立忽略;否则,如果是需要忽略工作区中创建的一个试验目录或试验性的文件,则使用本地忽略。
**忽略语法:**
忽略文件中的空行或以#开始的行会被忽略
可以使用通配符,参见Linux手册:glob(7)
如果名称的最前面是一个路径分割符(/),表明要忽略的文件在此目录下,而非子目录的文件
如果名称的最后面是一个路径分割符(/),表明要忽略的是整个目录,同名文件不忽略,否则同名的文件和目录都忽略
通过在名称的最前面添加一个感叹号(!),代表不忽略
#### 文件归档
git archive命令,可以对任意提交对应的目录树建立归档。
~~~
$ git archive -o latest.zip HEAD 基于最新提交建立归档文件latest.zip
$ git archive -o partial.tar HEAD src doc 只把目录src和doc建立到归档partial.tar中
$ git archive --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz 基于里程碑v1.0建立归档,并且为归档中的文件添加目录前缀1.0
~~~
在建立归档时,如果使用树对象ID进行归档,则使用当前时间作为归档中文件的修改时间,而如果使用提交ID或里程碑等,则使用提交建立的时间作为归档中文件的修改时间。
如果使用tar格式建立归档,并且使用提交ID或里程碑ID,还会把提交ID记录在归档文件的文件头中。记录在文件头中的提交ID可以通过git tar-commit-id命令获取。
如果希望在建立归档时忽略某些文件或目录,可以通过为相应文件或目录建立export-ignore属性加以实现。