SVN的日誌具備「 -v」模式,該模式輸出每次提交中更改的文件的文件名,以下所示: git
jes5199$ svn log -v ------------------------------------------------------------------------ r1 | jes5199 | 2007-01-03 14:39:41 -0800 (Wed, 03 Jan 2007) | 1 line Changed paths: A /AUTHORS A /COPYING A /ChangeLog A /EVOLUTION A /INSTALL A /MacOSX
有沒有一種快速的方法來獲取git中每次提交中已更改文件的列表? api
注意: git whatchanged
已被棄用,請改用git log
bash
鼓勵新用戶改用git-log [1] 。
whatchanged
命令本質上與git-log [1]相同,可是默認狀況下顯示原始格式diff輸出並跳過合併。 less該命令的保留主要是出於歷史緣由; 在經過閱讀Linux內核郵件列表發明
git log
以前好久就學過Git的許多人的手指都受過訓練來鍵入它。 svn
您可使用命令git whatchanged --stat
來獲取每次提交(以及提交消息)中已更改的文件的列表。 es5
對於已更改文件的完整路徑名: spa
git log --name-only
有關更改文件的完整路徑名和狀態: 日誌
git log --name-status
對於縮寫的路徑名和已更改文件的diffstat: code
git log --stat
還有更多選擇, 請查閱docs 。 orm
git diff --stat HEAD^!
顯示上次提交( HEAD
)的已更改文件和添加/刪除的行數。
在我看來,沒有哪一個命令能夠獲取僅包含文件名的簡明輸出,而且一次能夠添加和刪除多個提交的行數,所以我爲此建立了本身的bash腳本:
#!/bin/bash for ((i=0; i<=$1; i++)) do sha1=`git log -1 --skip=$i --pretty=format:%H` echo "HEAD~$i $sha1" git diff --stat HEAD~$(($i+1)) HEAD~$i done
被稱爲例如。 ./changed_files 99
得到以簡潔的形式從變化HEAD
到HEAD~99
。 能夠用管道輸送。 less
。
若是隻想獲取文件名而不提交其他的提交消息,則可使用:
git log --name-only --pretty=format: <branch name>
而後能夠將其擴展爲使用包含文件名的各類選項:
git log --name-status --pretty=format: <branch name> git log --stat --pretty=format: <branch name>
使用此方法時要注意的一件事是,輸出中有些空白行必須忽略。 若是要查看在本地分支上已更改但還沒有推送到遠程分支的文件,而且不能保證已從遠程獲取最新文件,則使用此功能頗有用。 :
git log --name-only --pretty=format: my_local_branch --not origin/master
將顯示全部在本地分支上已更改但還沒有合併到遠程主分支上的文件。
我用這個:
git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq
僅輸出文件及其狀態(添加,修改,刪除)的列表:
A sites/api/branding/__init__.py M sites/api/branding/wtv/mod.py ...