我有一個特定的問題,我正在處理需要解析更改的地方不是爲提交而暫存。顯示更改沒有在git中提交
如果你這樣做git status --porcelain
,你可以得到這樣的輸出:
M change1
M change2
MM change3
M change4
M change5
變化1和2都在上演,改變了3〜5都沒有。 MM
意味着別的東西我還沒有看過。
我可以分析此輸出,但我想知道如果有一個更好的方式來只顯示「無法上演提交變化」的git status
類別中的文件。
我有一個特定的問題,我正在處理需要解析更改的地方不是爲提交而暫存。顯示更改沒有在git中提交
如果你這樣做git status --porcelain
,你可以得到這樣的輸出:
M change1
M change2
MM change3
M change4
M change5
變化1和2都在上演,改變了3〜5都沒有。 MM
意味着別的東西我還沒有看過。
我可以分析此輸出,但我想知道如果有一個更好的方式來只顯示「無法上演提交變化」的git status
類別中的文件。
MM
狀態表示有一些變化上演,有些變化沒有上演。
更確切地說,這意味着該路徑的索引版本不同於HEAD
版本 - 這是第一個M
- 並且該路徑的工作樹版本與索引版本不同。
例如,假設你有一個README和你上演一場變革:
$ echo stuff >> README; git add README; git status --porcelain
M README
現在,您對同一個文件中的第二個變化。爲了使它特別有趣,讓我們刪除已添加stuff
線:
$ ed README << 'end'
$d
w
q
end
2634
2628
$ git status --porcelain
MM README
現在,如果我們git add
的文件,這個階段的工作樹版本,這是一樣的HEAD
版本和:
$ git add README
$ git status --porcelain
$
我可以解析這個輸出,但是我想知道是否有更好的方法來顯示'git status'中的「未進行提交的更改」文件。
你需要決定如何處理文件,在這種狀態下,如果有未合併爲潛在的狀態,有沒有可能尚未有合併衝突解決文件,這些都是未合併文件 - 他們應該爲他們做些什麼。
一般來說,如果你想要diff,請使用git diff
。 diff
有許多子版本:您可以比較樹(如HEAD
)與索引或工作樹,或者將兩棵樹相互比較。有關詳細信息,請參見the documentation,但簡而言之,git diff
將索引與工作樹進行比較,因此對應於狀態輸出的第二列。
要得到差異只發出文件的名稱,請使用--name-only
。所以git diff --name-only
會給你變化你可能階段。 (這不與未跟蹤文件的幫助;見Schwern's answer使用git ls-files
了點。)
你可以得到哪些跟蹤文件有git diff --name-only
或不分級的git ls-files . -m
變化。
您可以獲得未追蹤但未被忽略文件與git ls-files . --exclude-standard --others
。 (From this answer)。
將它們放在一起可以獲得所有不被忽略的文件,這些文件都是未被跟蹤的或者未經過暫存的更改。
git ls-files . --exclude-standard --others -m
我認爲提問者已經知道'git status --porcelain'是如何工作的。他們正在尋求一種更好的方式來列出已更改的文件。 – Schwern
我在這裏填寫'MM'狀態,在完成之前我意外地收到了部分帖子(貓在鍵盤上!)。 – torek