2009-11-29 39 views
22

有沒有什麼辦法可以獲得我鍵入以下內容時將要提交的文件列表?如何列出將要提交的文件?

git commit -m "my changes" 

git status lists too much。我可以刪除所有的單詞,但我寧可不要。我不想被告知未跟蹤的文件。

我已經試過

git ls-files -md 

但是,這並不表明,最近添加,但尚未提交的文件。

我在尋找相同的輸出,你會得到從

svn status -q 

例如 $ SVN狀態-q
一個file.py
中號DIR/database.py
M啓動的.py

回答

4

你可以試試:

git diff --name-status 

我收到以下內容:

$ git diff --name-status 
M  README.markdown 

沒有未跟蹤的文件。

+2

這是不正確的。問題是,「當我說'git commit -m message'時會提交什麼」。這給出了工作樹和緩存之間的差異,這更接近*不會提交的內容。 – 2009-11-29 21:58:30

26

這就是我在找的東西。感謝notnoop爲我所需要的領導。我想回發我的解決方案,以幫助其他人。

git diff HEAD --name-only 

因爲我打算做

git commit -s -F mesage.txt 

在第一線找到的文件。

我的目的是創建一個完全忽略索引的小系統,即我從來不需要執行git add。 (據我所知,這個索引在創建補丁的時候很有用,這在我的工作流程中並不是標準。)

+2

你不是指'git diff --cached --name-only'嗎? 'diff HEAD'將顯示上次提交的文件,而不是推送的文件。 '--cached'將會顯示當你運行'git commit'時提交的文件' – gcb 2016-07-15 17:18:18

+0

'git diff --staged --name-only'也可以。根據你對git的想法,你可能想使用--staged [synonym](https://stackoverflow.com/a/39877896)而不是--cached。 – SpeedCoder5 2018-03-01 15:14:18

8

這個命令會告訴你索引/緩存/分段區域中的哪些文件與當前HEAD(以及它們是添加,修改還是刪除),如果使用git commit而沒有顯式路徑或-a選項,則這些更改將被提交。它的格式與您所展示的svn status輸出非常相似。

git diff --cached --name-status 
3

我知道OP原來的要求,以避免git status,但我覺得這將是不錯的離開給後人(即誰不同意OP的保留以外的人)。

git status --porcelain | grep -v '^[ |??]' | sed -e 's/[A-Z] *//' 

我的理由是,git status --porcelain好像它正是這種類型的窘境建...

來源:http://git-scm.com/docs/git-status.html

編輯: 您也可以選擇不使用sed -e 's/[A-Z] *//'如果你想保持Git的修改標籤中的每個文件名前面。

+0

+1。我同意'git status --porcelain'可以在腳本中使用。我在http://stackoverflow.com/a/6978402/6309中記錄了很多,他說:「新選項\ ['--porcelain' \]使命令的本機輸出格式發出更容易處理的輸出瓷。」 – VonC 2014-01-04 20:23:27

+0

這似乎並沒有列出在git推送過程中將被推送的實際文件(並且已經通過git add/commmit進行了處理) – Paul 2015-10-29 11:49:16

相關問題