当执行以下命令时,会直接从暂存区删除文件,工做区则不作出改变java
#直接从暂存区删除文件,工做区则不作出改变 git rm --cached <file>
执行命令git
经过重写目录树移除add文件:github
#若是已经用add 命令把文件加入stage了,就先须要从stage中撤销 git reset HEAD <file>...
当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,可是工做区不受影响。数据库
示例:把f1.txt文件从暂存区撤回工做区ide
移除全部未跟踪文件gradle
#移除全部未跟踪文件 #通常会加上参数-df,-d表示包含目录,-f表示强制清除。 git clean [options]
示例:ui
移除前:idea
执行移除:spa
移除后:设计
#只从stage中删除,保留物理文件 git rm --cached readme.txt #不但从stage中删除,同时删除物理文件 git rm readme.txt #把a.txt更名为b.txt git mv a.txt b.txt
当执行提交操做(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会作相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,可是工做区不受影响。
当执行 “git rm –cached <file>” 命令时,会直接从暂存区删除文件,工做区则不作出改变。
当执行 “git checkout .” 或者 “git checkout — <file>” 命令时,会用暂存区所有或指定的文件替换工做区的文件。这个操做很危险,会清除工做区中未添加到暂存区的改动。
当执行 “git checkout HEAD .” 或者 “git checkout HEAD <file>” 命令时,会用 HEAD 指向的 master 分支中的所有或者部分文件替换暂存区和以及工做区中的文件。这个命令也是极具危险性的,由于不但会清除工做区中未提交的改动,也会清除暂存区中未提交的改 动。
git diff用于显示WorkSpace中的文件和暂存区文件的差别
用"git status"只能查看对哪些文件作了改动,若是要看改动了什么,能够用:
#查看文件修改后的差别 git diff [files]
命令:
---a表示修改以前的文件,+++b表示修改后的文件
#比较暂存区的文件与以前已经提交过的文件 git diff --cached
也能够把WorkSpace中的状态和repo中的状态进行diff,命令以下:
#比较repo与工做空间中的文件差别 git diff HEAD~n
若是仓库中已经存在文件f4.txt,在工做区中对f4修改了,若是想撤销可使用checkout,签出覆盖
检出命令git checkout是git最经常使用的命令之一,同时也是一个很危险的命令,由于这条命令会重写工做区
语法:
#用法一 git checkout [-q] [<commit>] [--] <paths>... #用法二 git checkout [<branch>] #用法三 git checkout [-m] [[-b]--orphan] <new_branch>] [<start_point>]
<commit>是可选项,若是省略则至关于从暂存区(index)进行检出
$ git checkout branch #检出branch分支。要完成图中的三个步骤,更新HEAD以指向branch分支,以及用branch 指向的树更新暂存区和工做区。 $ git checkout #汇总显示工做区、暂存区与HEAD的差别。 $ git checkout HEAD #同上 $ git checkout -- filename #用暂存区中filename文件来覆盖工做区中的filename文件。至关于取消自上次执行git add filename以来(若是执行过)的本地修改。 $ git checkout branch -- filename #维持HEAD的指向不变。用branch所指向的提交中filename替换暂存区和工做区中相 应的文件。注意会将暂存区和工做区中的filename文件直接覆盖。 $ git checkout -- . 或写做 git checkout . #注意git checkout 命令后的参数为一个点(“.”)。这条命令最危险!会取消全部本地的 #修改(相对于暂存区)。至关于用暂存区的全部文件直接覆盖本地文件,不给用户任何确认的机会! $ git checkout commit_id -- file_name #若是不加commit_id,那么git checkout -- file_name 表示恢复文件到本地版本库中最新的状态。
示例:
有些时候咱们不想把某些文件归入版本控制中,好比数据库文件,临时文件,设计文件等
在主目录下创建".gitignore"文件,此文件有以下规则:
如:
#为注释 *.txt #忽略全部 .txt结尾的文件 !lib.txt #但lib.txt除外 /temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp build/ #忽略build/目录下的全部文件 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
示例:
建立一个.gitignore文件忽视全部的日志文件
查看状态:
从上图中能够看出2个日志文件并无添加到暂存区,直接被忽视了。
针对各类语言与项目的Git忽视文件: https://github.com/kaedei/gitignore https://github.com/github/gitignore
通用的java忽视文件:
# Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid*
通用的Visual Studio开发项目忽视文件:
idea忽视文件: