我在Git中發現的一個令人難以置信的命令是git add -u
,它將除了未跟蹤文件之外的所有內容都放入索引中。有沒有反過來?在過去的幾個月中,我經常發現自己處於一種交互式添加索引更新的位置,我希望在提交之前將所有未跟蹤的文件添加到該索引。僅添加未跟蹤文件
有沒有辦法只將添加到未跟蹤的文件到索引而不單獨標識它們?我在幫助文檔中看不到任何明顯的內容,但也許我錯過了它?
謝謝。
我在Git中發現的一個令人難以置信的命令是git add -u
,它將除了未跟蹤文件之外的所有內容都放入索引中。有沒有反過來?在過去的幾個月中,我經常發現自己處於一種交互式添加索引更新的位置,我希望在提交之前將所有未跟蹤的文件添加到該索引。僅添加未跟蹤文件
有沒有辦法只將添加到未跟蹤的文件到索引而不單獨標識它們?我在幫助文檔中看不到任何明顯的內容,但也許我錯過了它?
謝謝。
這很容易與git add -i
。鍵入a
(對於「添加未跟蹤」),然後*
(對於「全部」),然後q
(退出),完成。
要使用一個命令做到這一點:echo -e "a\n*\nq\n"|git add -i
我希望有更少的東西,好,互動,但它肯定比檔案文件更好。 :-) –
@回聲-e「a \ n * \ nq \ n」| git add -i' – Mat
@Mat我來完成這個完全自動化,就像上面的評論。謝謝。 –
git ls-files -o --exclude-standard
給未跟蹤文件,所以你可以這樣做以下(或添加一個別名的話):
git add $(git ls-files -o --exclude-standard)
alias gau =「git ls-files -o --exclude-standard | xargs -i git add'{}'」適合我 – Stephan
git ls-files --help相當有用閱讀: '-o,--others' '在輸出中顯示其他(即未跟蹤的)文件' –
您可以將它添加到你的〜/的.gitconfig文件:
[alias]
add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"
然後,在命令行,只需要運行:
git add-untracked
我喜歡這種方法,但它不處理文件名中的空格。 –
不是您要尋找什麼,但我發現這非常有用:
git add -AN
將所有文件添加到索引,但沒有他們的內容。現在未被跟蹤的文件現在就像被跟蹤一樣。他們的內容將顯示在git diff
中,然後您可以與git add -p
交互式添加。
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
不知道爲什麼這是唯一的工作,但它是,謝謝 – slackbot39243
要添加的所有未跟蹤文件 混帳命令
混帳添加-A
此外,如果你想獲得各種可用選項的詳細信息,您可以鍵入命令
混帳添加-i
,而不是第一個命令,這個你會得到更多的選擇,包括選擇添加所有未跟蹤的文件如下所示:
$ git add -i warning:LF將被README.txt中的CRLF替換。 文件將在其工作目錄中具有其原始行尾。 警告:LF將被package.json中的CRLF所取代。
*命令* 1:狀態2:更新3:回覆4:添加未經跟蹤的5塊6:DIFF 7:退出8: 幫助現在什麼>一個
人建議通過管道將輸出git ls-files
到git add
,但是如果文件名包含空格或水平字符(例如*
),則會失敗。
的安全的方式是使用:
git ls-files -o --exclude-standard -z | xargs -0 git add
其中-z
告訴混帳使用\0
行結束符和-0
告訴xargs的相同。這種方法的唯一缺點是-0
選項是非標準的,因此只有某些版本的xargs
支持它。
如果您有成千上萬的未跟蹤文件(唉,不要問),那麼當添加*
時,git add -i
將不起作用。您將收到一條錯誤消息,說明Argument list too long
。
如果隨後也使用的是Windows(不要問#2 :-),需要使用PowerShell添加所有未跟蹤文件,你可以使用這個命令:
git ls-files -o --exclude-standard | select | foreach { git add $_ }
我想這和它工作:
git stash && git add . && git stash pop
git stash
只能將所有修改過的跟蹤文件到獨立的堆棧,然後剩餘的文件是未跟蹤文件。然後通過git add .
將要求的所有文件未跟蹤文件。最後,從堆棧中獲取所有已修改文件的集合git stash pop
關於「將所有未處理的文件都扔入索引中」,「.gitignore」專門爲此目的而設計,而不是'git add -u'。 – Pacerier
另外,你是否要求在刪除所有當前跟蹤的文件的同時添加未跟蹤的文件,或者你是否要求在當前跟蹤的文件的頂部**添加未跟蹤的文件**(使所有事件都被跟蹤)? – Pacerier