如何讓git log顯示像svn log -v這樣的文件名

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


#1樓

注意: git whatchanged已被棄用,請改用git log bash

鼓勵新用戶改用git-log [1]whatchanged命令本質上與git-log [1]相同,可是默認狀況下顯示原始格式diff輸出並跳過合併。 less

該命令的保留主要是出於歷史緣由; 在經過閱讀Linux內核郵件列表發明git log以前好久就學過Git的許多人的手指都受過訓練來鍵入它。 svn


您可使用命令git whatchanged --stat來獲取每次提交(以及提交消息)中已更改的文件的列表。 es5

參考文獻


#2樓

對於已更改文件的完整路徑名: spa

git log --name-only

有關更改文件的完整路徑名和狀態: 日誌

git log --name-status

對於縮寫的路徑名和已更改文件的diffstat: code

git log --stat

還有更多選擇, 請查閱docsorm


#3樓

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得到以簡潔的形式從變化HEADHEAD~99 。 能夠用管道輸送。 less


#4樓

若是隻想獲取文件名而不提交其他的提交消息,則可使用:

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

將顯示全部在本地分支上已更改但還沒有合併到遠程主分支上的文件。


#5樓

我用這個:

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
...
相關文章
相關標籤/搜索