git使用ls-files查看暫存區中的內容


git ls-files默認是顯示暫存區中全部文件的路徑,你可以加選項來篩選文件(這命令能看遠程倉庫文件嗎?)

 

 

 

 原文:https://blog.csdn.net/the_v_/article/details/48786365

 參考:https://blog.csdn.net/weixin_38289699/article/details/78203650

$ git ls-tree -l HEAD

查看HEAD(版本庫中當前提交)指向的目錄樹
-l參數可以顯示文件大小
輸出的文件條目從左至右,第一個字段是文件的屬性,第二個字段(blob)說明是Git對象庫中的一個blob對象(文件),第三個字段是該文件在對象庫中對應的ID——一個40位的SHA1哈希值格式的ID,第四個字段是文件大小,第五個字段是文件名。
在瀏覽暫存區的目錄樹之前,首先清除工作區當前的改動。
$ git clean -fd

清除當前工作區中沒有加入版本庫的文件和目錄(非跟蹤文件和目錄),然后執行$ git checkout .命令,用暫存區內容刷新工作區。
$ git ls-files -s
顯示暫存區的目錄樹,其中第三個字段不是文件大小而是暫存區編號
若想針對暫存區的目錄樹使用git ls-tree命令,需要先將暫存區的目錄樹寫入Git對象庫,然后針對該目錄樹執行git ls-tree命令
$ git write-tree
輸出的就是寫入Git對象庫的TreeID,這個ID將作為下一條命令的輸入5b873f747ccb268e4491f289eb37fc675ff5825b
$ git ls-tree -l 5b873f747
只需寫前幾位,只要不與其他對象的ID沖突即可
100644 blob 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 12test
可以看出到處都是40位的SHA1哈希值格式的ID,可以用於指代文件內容(blob)、目錄樹(tree)和提交。
$ git write-tree | xargs git ls-tree -l -r -t

遞歸顯示目錄內容使用-r參數,顯示遞歸過程中遇到的每棵樹而不是只顯示最終文件使用-t參數
不要使用git commit -a

帶上此參數,對本地所有變更的文件執行提交操作,包括對本地修改的文件和刪除的文件,但不包括未被版本庫跟蹤的文件。可以簡化一些操作,減少用git add命令標識變更文件的步驟,但是丟掉了對提交內容進行控制的能力。
$ git stash 運行完此命令后再查看工作區狀態,會發現工作區尚未提交的改動(包括暫存區的改動)全都不見了

 

其實,感覺提交代碼的更改一共分2個階段。

1).從工作目錄,提交到stage。

2).從stage提交到master。

從工作目錄提交到stage,需要用add或者rm命令,只提交到stage,而沒有提交到master,是不會自動同步到master的。

從stage提交到master用commit命令。

退回也是要分兩步,一個是從master退回到stage,然后再從stage退回到工作目錄。

對於還沒有提交到stage的,可以從stage用checkout命令退回,這一步會取stage中的文件狀態,覆蓋掉工作目錄中文件的狀態,跟master完全沒關系。

對於已經到達stage的,想把state中的文件狀態用master中的覆蓋掉,就用reset命令,這樣就把stage中修改用master的狀態覆蓋掉了,完全跟工作目錄沒關系

 

git checkout -- file

 

實例:命令git checkout – readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這里有兩種情況:
  一種是readme.txt自修改后還沒有被放到暫存區,撤銷修改就回到和版本庫一模一樣的狀態;
  一種是readme.txt已經添加到暫存區后,又作了修改,撤銷修改就回到添加到暫存區后的狀態。 

需要注意的是 git checkout – file命令中的–,沒有–,就變成了“切換到另一個分支”的命令

 

git reset HEAD file

實例:命令git reset HEAD file可以把暫存區的修改撤銷掉(unstage),重新放回工作區

git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。 

 

 

 

git ls-files [-z] [-t] [-v] (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])* (-[c|d|o|i|s|u|k|m])* [-x <pattern>|--exclude=<pattern>] [-X <file>|--exclude-from=<file>] [--exclude-per-directory=<file>] [--exclude-standard] [--error-unmatch] [--with-tree=<tree-ish>] [--full-name] [--abbrev] [--] [<file>...]

選項

含義

-c, --cached

顯示緩存了的文件(默認)

-d, --deleted

顯示刪除了的文件

-m, --modified

顯示修改了的文件

-o, --others

顯示其他類型的文件(比如未追蹤的)

-i, --ignored

顯示忽略了的文件(滿足忽略模式的)

-s, --stage

顯示暫存的條目的相關信息(模式位,文件哈希后的值,暫存號和文件名),

[<tag> ]<mode> <object> <stage> <file>

比如:

選項

-c   --cached

在輸出中顯示緩存的文件(默認)

-d   --deleted

在輸出中顯示已刪除的文件

-m   --modified

在輸出中顯示已修改的文件

-o   --others

在輸出中顯示其他(即未跟蹤的)文件

-i   --ignored

在輸出中只顯示被忽略的文件。在索引中顯示文件時,只打印排除模式匹配的文件。顯示“其他”文件時,只顯示通過排除模式匹配的文件。

-s   --stage

在輸出中顯示暫存內容的模式位,對象名稱和階段編號。

--directory

如果整個目錄被分類為“其他”,則只顯示其名稱(帶有斜線)而不是其全部內容。

--no-empty-directory

不要列出空目錄。沒有 - 目錄無效。

-u   --unmerged

在輸出中顯示未合並的文件(forces --stage)

-k   --killed

在文件系統上顯示由於文件/目錄沖突而需要刪除的文件以使checkout-index成功。

-z

\ 0行輸出終止,不要引用文件名。有關更多信息,請參閱下面的OUTPUT。

-x <pattern>   --exclude=<pattern>

跳過未匹配的文件匹配模式。請注意,模式是一個外殼通配符模式。有關更多信息,請參閱下面的EXCLUDE PATTERNS。

-X <file>   --exclude-from=<file>

從<file>讀取排除模式; 每行1個。

--exclude-per-directory=<file>

讀取僅適用於<file>中的目錄及其子目錄的其他排除模式。

--exclude-standard

在每個目錄中添加標准Git排除項:.git / info / exclude,.gitignore和用戶的全局排除文件。

--error-unmatch

如果任何<file>沒有出現在索引中,則將其視為錯誤(返回1)。

--with-tree=<tree-ish>

當使用--error-unmatch將用戶提供的<file>(即路徑模式)參數展開為路徑時,假定自從指定的<tree-ish>后索引中刪除的路徑仍存在。使用此選項-s-u選項沒有任何意義。

-t

此功能已半棄用。對於編寫腳本的目的,git-status [1] --porcelain和git-diff-files [1] --name-status幾乎總是優越的選擇,用戶應該查看git-status [1] --short或git-diff [1] --name-status以獲得更多用戶友好的選擇。

此選項在每行開始時用以下標記(后跟一個空格)標識文件狀態:

H

緩存

S

skip-worktree

M

未合並

R

removed/deleted

C

modified/changed

K

to be killed

?

other

-v

-t標記為assume unchanged(請參閱git-update-index [1])的文件類似,但使用小寫字母。

--full-name

從子目錄運行時,該命令通常會輸出相對於當前目錄的路徑。該選項強制相對於項目頂部目錄輸出路徑。

--recurse-submodules

在存儲庫中的每個子模塊上遞歸調用ls-files。目前只支持 - 高速緩存模式。

--abbrev=<n>

不顯示完整的40字節十六進制對象行,只顯示部分前綴。非默認位數可以用--abbrev = <n>來指定。

--debug

在描述文件的每一行之后,添加更多關於其緩存條目的數據。這旨在顯示盡可能多的手動檢查信息; 確切的格式可能會隨時更改。

--eol

顯示文件的<eolinfo>和<eolattr>。<eolinfo>是當“text”屬性為“auto”(或未設置且core.autocrlf不為false)時由Git使用的文件內容標識。<eolinfo>是“文本”,“無”,“lf”,“crlf”,“混合”或“”。

“”表示該文件不是常規文件,它不在索引中或在工作樹中無法訪問。

它是“”,“ -  text”,“text”,“text = auto”,“text eol = lf”,“text eol = crlf”時檢查或提交時使用的屬性。由於支持Git 2.10“text = auto eol = lf”和“text = auto eol = crlf”。

索引(“i / <eolinfo>”)和工作樹(“w / <eolinfo>”)中的<eolinfo>均顯示為常規文件,后面跟着(“attr / <eolattr>”)。

不要將更多的參數解釋為選項。

<file>

要顯示的文件。如果沒有給出文件,則顯示與其他指定標准相匹配的所有文件。

輸出

git ls-files只是輸出文件名,除非--stage在這種情況下輸出:

[<tag> ]<mode> <object> <stage> <file>

git ls-files --eol 將顯示i / <eolinfo> <SPACES> w / <eolinfo> <SPACES> attr / <eolattr> <SPACE *> <TAB> <file>

git ls-files --unmergedgit ls-files --stage可用於檢查對未合並的路徑的詳細信息。

對於未合並的路徑,索引不是記錄單個模式/ SHA-1對,而是記錄多達三個這樣的對; 一個來自階段1中的樹O,階段2中的A以及階段3中的B.這個信息可以由用戶(或瓷器)用來查看最終應該在路徑上記錄什么。(有關狀態的更多信息,請參閱git-read-tree [1])

如果沒有這個-z選項,帶有“不尋常”字符的路徑名將按照配置變量的說明引用core.quotePath(請參閱git-config [1])。使用-z文件名是逐字輸出的,並且該行由NUL字節終止。

排除模式

git ls-files可以在遍歷目錄樹時使用“排除模式”列表,並查找指定何時指定標志 - 其他或--ignign的文件。gitignore [5]指定排除模式的格式。

這些排除模式來自這些地方,以便:

  1. 命令行標志--exclude = <pattern>指定一個模式。模式按照它們在命令行中出現的順序排列。

  1. 命令行標志--exclude-from = <file>指定一個包含模式列表的文件。模式按照它們在文件中出現的順序排列。

  1. 命令行標志--exclude-per-directory = <name> git ls-files通常指定每個目錄中文件的名稱.gitignore。較深目錄中的文件優先。模式按照它們在文件中出現的順序排列。

使用--exclude-from指定的文件中排除或讀取的模式在命令行上指定的模式相對於目錄樹的頂部。從--exclude-per-directory指定的文件中讀取的模式相對於模式文件出現的目錄。

 

 

更多可見:Git中文開發手冊

還有就是想問一下有沒有什么命令可以查看遠程倉庫的所有文件目錄?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM