2010-10-07 38 views
22

在make過程中,我創建了我嵌入到鏈接輸出中的字符串字段。很有用。什麼是在Git工作區中檢測修改文件的簡單方法?

除了git status命令的複雜sed/grep解析,如何可以容易地確定,如果在工作空間中的文件已經根據git修改?

+0

如果你只在乎曾經知道的東西是否已經變化(沒有哪些已經改變)參見[如何以編程方式確定是否有未提交更改?](http://stackoverflow.com/q/3878624/193688) – 2010-10-10 06:31:56

回答

24

git ls-files -m

要了解這一點,你可以通過git help -a瀏覽過。

+0

這是完美的。 – Jamie 2010-10-07 16:05:03

+8

@Jamie:分階段(但未提交)更改的文件不會顯示出'git ls-files -m',這可能是也可能不是您想要的。 – 2010-10-10 06:56:32

+1

啊。感謝您的輸入。實際上,'git ls-files -m'不是我想要的,但它確實回答了我的具體問題。 +1評論和回答。 – Jamie 2010-10-12 14:35:17

17

git status --porcelain似乎給出了一個很好的可分析輸出。

+0

非常好。由於其他原因會有用。 – Jamie 2010-10-07 16:05:46

+0

這真是太好了,我只是用它來自動化git commit摘要(就像你從GitHub的web界面中獲得的),我真正想到了這個問題:[單向添加,提交和推送](https:// github。 COM/lmmx/devnotes /維基/自動-git的狀態 - 摘要)。 – 2015-04-25 22:22:26

26

如果你只是想要一個簡單的「有從頭部什麼區別嗎?」:

git diff-index --quiet HEAD 

如果退出代碼爲0,則沒有任何差異。

如果你想「從頭部已經改變了哪些文件?」:

git diff-index --name-only HEAD 

如果你想「從頭部已經改變了哪些文件,以及以何種方式有他們改變(添加,刪除,更改)? 「:

git diff-index --name-status HEAD 

添加-M(和-C)如果你想重新命名(及複印件)檢測。

這些命令將檢查階段性內容(索引中的內容)和工作樹中的文件。諸如git ls-files -m之類的替代方法將僅針對索引檢查工作樹(即,它們將忽略也在工作樹中的任何分階段(但未提交)的內容)。

2

git diff --name-only做同樣的(可能是更直觀...)

相關問題