Git06

、移除文件与目录(撤销add)

当执行以下命令时,会直接从暂存区删除文件,工做区则不作出改变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 分支中的所有或者部分文件替换暂存区和以及工做区中的文件。这个命令也是极具危险性的,由于不但会清除工做区中未提交的改动,也会清除暂存区中未提交的改 动。

4.3.五、查看文件修改后的差别

git diff用于显示WorkSpace中的文件和暂存区文件的差别

用"git status"只能查看对哪些文件作了改动,若是要看改动了什么,能够用:

#查看文件修改后的差别
git diff [files]

命令:

 ---a表示修改以前的文件,+++b表示修改后的文件

#比较暂存区的文件与以前已经提交过的文件
git diff --cached

也能够把WorkSpace中的状态和repo中的状态进行diff,命令以下:

#比较repo与工做空间中的文件差别
git diff HEAD~n

4.3.六、签出

若是仓库中已经存在文件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 表示恢复文件到本地版本库中最新的状态。
复制代码

示例: 

4.3.六、忽略文件

有些时候咱们不想把某些文件归入版本控制中,好比数据库文件,临时文件,设计文件等

在主目录下创建".gitignore"文件,此文件有以下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可使用Linux通配符。例如:星号(*)表明任意多个字符,问号(?)表明一个字符,方括号([abc])表明可选字符范围,大括号({string1,string2,...})表明可选的字符串等。
  3. 若是名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 若是名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 若是名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

如:

复制代码
#为注释
*.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开发项目忽视文件:

 View Code

idea忽视文件:

复制代码
.idea/
*.iml
out/
gen/
idea-gitignore.jar
resources/templates.list
resources/gitignore/*
build/
build.properties
junit*.properties
IgnoreLexer.java~
.gradle

/verification
复制代码
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息