簡體   English   中英

我需要檢查分支中的每個提交,需要在Git中列出已更改,添加和刪除的文件

[英]i need to check for every commit made in the branch, need list the changed, added & deleted files in Git

我需要在一行中列出分支中所有已更改,已刪除和添加的文件。 稍后將添加和修改添加到一個名為added_or_modified.txt的文件中,並將其添加到deleted.txt中。 有沒有辦法在一行中找到更改,添加和刪除的文件?

(因為你沒有提到你想要區分哪些狀態,我假設最簡單的上下文,與HEAD區分。如果你試圖看到其他給定狀態之間的差異,請隨意將它添加到你的問題中,我會適應我的答案)

我會做一些事情

git diff --name-status

在文件名之前,您將使用符號表示文件狀態的字母:

A added
C changed
D deleted
M modified
R renamed
T changed
U unmerged
X unknown
B broken pairing

這里關於這些狀態的詳細信息。


對於文件中已刪除的文件列表(其他狀態的原則相同),您可以這樣做

git diff --diff-filter=D > deleted.txt

你的問題標題說你需要檢查每個提交。 在那種情況下,也許你的意思是像git log 另一方面,您對輸出的描述聽起來就像您只需要一個文件列表(或稍后兩個)。 這表明git diff代替了。

git log --name-only --format="" <upstream_branch_name>..<branch_name>

要么

git diff --name-only <upstream_branch_name>..<branch_name>

例如,如果你正在檢查一個名為my_feature的分支,並想知道每個提交中的更改,因為它與develop分支分開,你可以說

git log --name-only --format="" develop..my_feature

在這里,我使用了--format=""這樣你可以得到一個文件名列表; 如果您為每次提交生成一個列表,您可能希望使用format選項執行不同的操作。 我提到它是因為,正如所寫的那樣,文件可能會出現多次 - 甚至出現一次,因為提交A創建了它,並且再次因為提交B刪除了它。 如果這不可取,並且您只想要與分支關聯的凈更改,請使用diff而不是log

在線下你可以改變它

git log --name-status --format="" develop..my_feature

要么

git diff --name-status develop..my_feature

並處理結果以將刪除分離到它們自己的文件。 請注意,使用--name-status ,git將默認應用重命名檢測。 所以你可能會得到一些像

D    file1
A    file2
M    file3

這是你想要看到的。 D開頭的那個被刪除了,所以把它放在刪除列表中; 其他人被添加和修改。 但你也可能會得到一些像

R99  fileX   fileY

意味着git認為你已經將fileXfileXfileY並在同一次提交中進行了少量修改。 如果你寧願git給你

D    fileX
A    fileY

這樣你就可以看到單獨出現和消失的路徑,然后添加--no-renames選項

git diff --name-status --no-renames develop..my_feature

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM