我想只添加修改後的文件。 我想:用git添加特定的列表修改文件add
git status | grep "modified" | cut -d " " -f4 | git add
或
git status | grep "modified" | cut -d " " -f4 | xargs git add
,但它不工作。我應該使用什麼?
我想只添加修改後的文件。 我想:用git添加特定的列表修改文件add
git status | grep "modified" | cut -d " " -f4 | git add
或
git status | grep "modified" | cut -d " " -f4 | xargs git add
,但它不工作。我應該使用什麼?
第一個將不起作用,因爲您不使用xargs
。第二個不起作用,因爲cut
不起作用 - 查看輸出。
有命令git ls-files --modified
它給你一個修改文件的列表,每行一個。如果你沒有在文件名中的空間,只需使用:
git ls-files --modified | xargs git add
如果你在你的文件名中的空格,使用-z
和-0
選項(確保你的xargs
變種支持-0
作爲一個選項;它不是萬能的,但標準是與GNU xargs
):
git ls-files --modified -z | xargs -0 git add
在使用git status
沒有標誌,你需要確信有在文件名中沒有空格,然後你可以使用:
git status | awk '/[[:space:]]modified:[[:space:]]/{print $2}' | xargs git add
另外,git status -s
給出了更好,更容易解析的輸出格式。您可以使用:
git status -s | sed -n '/^ M/s///p' | xargs git add
這適用於簡單的情況下,(你在本地修改的文件,它尚未在索引中,這是唯一相關的變化)。您應該從短格式中讀取git status --help
的內容,以瞭解您需要如何處理(很多)其他情況。
另請注意,git commit -a
將提交所有修改的文件。
我嘗試:
git ls-files -o | grep "tests/" | xargs -0 git add
,但我得到xargs: argument line too long
。
-0
選項爲xargs
需要「行」以空字節結尾。您的git
命令不會生成這些命令,因爲您省略了-z
選項。您可能忽略了這一點,因爲您擔心中間的grep
(它只適用於以換行符結尾的行),但命令行必須自始至終保持一致,可以使用換行符或使用空值作爲文件名分隔符。幸運的是,grep
有一個選項--null
(適用於GNU和BSD grep
; GNU也允許-z
,但這對BSD來說意味着不同)來處理這些數據。因此,你應該嘗試之一:
git ls-files -o -z | grep --null "tests/" | xargs -0 git add
,或者,如果您不擔心空間在文件名:
git ls-files -o | grep "tests/" | xargs git add
您可以簡單地使用git add -u
。 It will stage only modified files。
git add on directory還更新目錄中已刪除文件的階段? @ 1615903 – Alex
我試試:git ls-files -o | grep「tests /」| xargs -0 git add。但我得到xargs:參數線太長 @Jonathan Leffler – Alex
我想只添加未跟蹤文件。我也嘗試使用z標誌,但它不起作用@Jonathan Leffler – Alex
我很抱歉,但它仍然不起作用。我得到致命pathspec。 @Jonathan Leffer – Alex