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
複製代碼
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息