2022年11月24日 星期四

Git 列出指定Commit 間有異動的檔案

難免有時候會需要確認幾次簽入中異動了哪些檔案,操作上可以透過 Sourcetree 去點每個 commit,

但就是慢了點;另外,若是不幸的需要交付異動的相關檔案(含新增修改),若此次調整有多個 簽入,

那可能的作法可以先 combind to one commit,這次紀錄,先不將commit 合併情境下,透過指令來

檢視清單...


前面有提到因為是不先合併commit 的方式操作,以下是針對兩個檔案 cat.txt、dog.txt 來操作,並且

保持原紀錄,如下所示



那要針對某次 commit 或某兩個 commit 之間所異動的檔案列表,可以使用如下語法

git diff-tree -r --no-commit-id --name-only --diff-filter=ACDMRT HEAD

git diff-tree -r --no-commit-id --name-only --diff-filter=ACDMRT cb68330

git diff-tree -r --no-commit-id --name-only --diff-filter=ACDMRT cb68330 708ce90


先看結果



說明指令 git diff-tree -r --no-commit-id --name-only --diff-filter=ACDMRT cb68330 708ce90


透過 diff-tree 來比對 commit 差異

搭配 -r :會將指目錄、子目錄及檔案列出

搭配 –on-commit-id :不列出 commit id

搭配 –name-only:僅檔案名稱,不含其他修改狀況或其他,若是不寫會是如下顯示


搭配 --diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]]:過濾出相對的狀態檔案,其中狀態有如下所示,參考官網

A - Added、C - Copied、D - Deleted、M - Modified、R - Renamed、T - have their type (mode) changed

U - Unmerged、X - Unknown、B - have had their pairing Broken、* - All-or-none





亦可使用 git diff-tree --pretty="" -r --name-only --diff-filter=ACDMRT cb68330 708ce90



若有輸出清單到外部檔案的需求可使用以下語法

git diff-tree -r --no-commit-id --name-only --diff-filter=ACDMRT e9a1edd HEAD > D:\temp\files.txt


查看輸出檔案



若還想要輸出同時要在畫面上呈現,可使「&&」 串接讀取檔案指令「cat」


[ 2022/12/22 ] 更新

若要將輸出結果直接複製到剪貼簿,方便後續 ctrl+v 貼上,可搭配「 | clip」語法

git diff-tree -r --no-commit-id --name-only --diff-filter=ACDMRT e9a1edd HEAD | clip




參考:

沒有留言:

張貼留言