2011-09-16 91 views
117

我在Git中發現的一個令人難以置信的命令是git add -u,它將除了未跟蹤文件之外的所有內容都放入索引中。有沒有反過來?在過去的幾個月中,我經常發現自己處於一種交互式添加索引更新的位置,我希望在提交之前將所有未跟蹤的文件添加到該索引。僅添加未跟蹤文件

有沒有辦法只將添加到未跟蹤的文件到索引而不單獨標識它們?我在幫助文檔中看不到任何明顯的內容,但也許我錯過了它?

謝謝。

+1

關於「將所有未處理的文件都扔入索引中」,「.gitignore」專門爲此目的而設計,而不是'git add -u'。 – Pacerier

+0

另外,你是否要求在刪除所有當前跟蹤的文件的同時添加未跟蹤的文件,或者你是否要求在當前跟蹤的文件的頂部**添加未跟蹤的文件**(使所有事件都被跟蹤)? – Pacerier

回答

162

這很容易與git add -i。鍵入a(對於「添加未跟蹤」),然後*(對於「全部」),然後q(退出),完成。

要使用一個命令做到這一點:echo -e "a\n*\nq\n"|git add -i

+3

我希望有更少的東西,好,互動,但它肯定比檔案文件更好。 :-) –

+28

@回聲-e「a \ n * \ nq \ n」| git add -i' – Mat

+1

@Mat我來完成這個完全自動化,就像上面的評論。謝謝。 –

23

git ls-files -o --exclude-standard給未跟蹤文件,所以你可以這樣做以下(或添加一個別名的話):

git add $(git ls-files -o --exclude-standard) 
+1

alias gau =「git ls-files -o --exclude-standard | xargs -i git add'{}'」適合我 – Stephan

+0

git ls-files --help相當有用閱讀: '-o,--others' '在輸出中顯示其他(即未跟蹤的)文件' –

8

您可以將它添加到你的〜/的.gitconfig文件:

[alias] 
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add" 

然後,在命令行,只需要運行:

git add-untracked 
+0

我喜歡這種方法,但它不處理文件名中的空格。 –

9

不是您要尋找什麼,但我發現這非常有用:

git add -AN 

將所有文件添加到索引,但沒有他們的內容。現在未被跟蹤的文件現在就像被跟蹤一樣。他們的內容將顯示在git diff中,然後您可以與git add -p交互式添加。

2

git ls-files列出當前目錄中的文件。如果你想從樹中的任何位置列出未跟蹤文件,這可能會更好地工作:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) 

要添加樹中的所有未跟蹤文件:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add 
+0

不知道爲什麼這是唯一的工作,但它是,謝謝 – slackbot39243

-3

要添加的所有未跟蹤文件 混帳命令

混帳添加-A

此外,如果你想獲得各種可用選項的詳細信息,您可以鍵入命令

混帳添加-i

,而不是第一個命令,這個你會得到更多的選擇,包括選擇添加所有未跟蹤的文件如下所示:

$ git add -i warning:LF將被README.txt中的CRLF替換。 文件將在其工作目錄中具有其原始行尾。 警告:LF將被package.json中的CRLF所取代。

*命令* 1:狀態2:更新3:回覆4:添加未經跟蹤的5塊6:DIFF 7:退出8: 幫助現在什麼>一個

8

人建議通過管道將輸出git ls-filesgit add,但是如果文件名包含空格或水平字符(例如*),則會失敗。

的安全的方式是使用:

git ls-files -o --exclude-standard -z | xargs -0 git add 

其中-z告訴混帳使用\0行結束符和-0告訴xargs的相同。這種方法的唯一缺點是-0選項是非標準的,因此只有某些版本的xargs支持它。

0

如果您有成千上萬的未跟蹤文件(唉,不要問),那麼當添加*時,git add -i將不起作用。您將收到一條錯誤消息,說明Argument list too long

如果隨後也使用的是Windows(不要問#2 :-),需要使用PowerShell添加所有未跟蹤文件,你可以使用這個命令:

git ls-files -o --exclude-standard | select | foreach { git add $_ } 
0

我想這和它工作:

git stash && git add . && git stash pop 

git stash只能將所有修改過的跟蹤文件到獨立的堆棧,然後剩餘的文件是未跟蹤文件。然後通過git add .將要求的所有文件未跟蹤文件。最後,從堆棧中獲取所有已修改文件的集合git stash pop