2014-07-17 23 views
3

我用下面的Git命令獲取的修改過的文件列表及其特定的Git狀態提交

git diff-tree --no-commit-id --name-only -r <SHA> 

得到的修改過的文件列表。

不幸的是,該列表不指定更改爲每個文件類型:添加,修改或刪除...等

我如何可以顯示變化[變化的類型,文件名]列表給定的特定SHA的SHA。

+0

如果你想獲得任意兩個之間的文件修改提交,而不是一個具體的承諾,然後看到[顯示兩個混帳之間的所有修改過的文件提交](http://stackoverflow.com/q/1552340/456814)。 *(對不起,重新評論,前一個有太多的大膽,使它看起來很糟糕,所以我擺脫了它)* –

+0

開發人員使用這個命令在gitlab預接收鉤比較我們的代碼gitlab服務器(傳入的提交)代碼被推送/接收。只是想確認我們做的是正確的事情。似乎工作。 –

回答

3

使用--name-status,而不是--name-only

git diff-tree --no-commit-id --name-status -r <SHA> 

這將顯示FIL與ENAME的狀態信(從人提取):Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type (i.e. regular file, symlink, submodule, ...) changed (T), are Unmerged (U), are Unknown (X), or have had their pairing Broken (B).

0

使用

git whatchanged 

看到上次提交

+0

這會輸出所有提交的所有更改,而不是僅傳遞提交的SHA。 –

+1

你說得對。我會更新我的答案 – stdcall

+0

我試圖解決的問題是針對特定的提交。 –

0
git checkout <commit> 
git whatchanged -1 
0

由於hvd's commentstdcall's answer

你原來的答案,其中包括git whatchanged SHA-1形式,幾乎是正確的:添加-1選項以僅獲取該特定提交。

這裏是那些有興趣誰的解決方案:

git whatchanged <SHA> -1 

另一種解決方案是:

git diff-tree --no-commit-id -r <SHA> 
2

雖然Joe's answer指出,你可以使用--name-status國旗git diff-tree,你也可以使用相同的標誌與git diff代替。

要獲取更改的文件,它們的狀態只是一個特定的提交,你可以只使用了SHA ID與提交父母符犯,像這樣

git diff --name-status <sha>^ <sha> 

的修訂版本<sha>^意味着提交<sha>的第一個父代,因此使用git diff可以有效地爲您提供在提交與其父代之間所做的所有更改。

替代

您還可以使用

git diff --name-status <sha>~ <sha> 

其中<sha>~也意味着承諾<sha>的第一個父。

文檔

+0

這也很好,不幸的是不能標記多個答案作爲正確的答案。標記出來,這是一個正確的解決方案,謝謝。 –

相關問題