2012-12-21 51 views
28

過濾器我有這樣的承諾的Git日誌:通過提交的作者日期

commit 8a183536da1641afa6bd5a27ae391b387b7cd052 
Author:  hidden 
AuthorDate: Fri Sep 7 10:13:59 2012 
Commit:  hidden 
CommitDate: Fri Dec 7 17:29:24 2012 

我想過濾日誌,並顯示通過AuthorDate提交。

我試圖--since & --until選項,但它實際上過濾CommitDate

這意味着我只能得到由

git log --since='2012-12-01' --until='2012-12-10' 

提交如果我想要得到的起始日期「2012-09-01」的承諾過濾日期和結束日期「2012年9月10日」

有小費嗎?

+0

@skalee'Sep'和'Dec'不是一回事...... –

回答

6

恐怕你需要做一些腳本:

git log --format="%ad %H" --date=iso | sort | ruby -ane 'date = $F[0] ; hash = $F[3] ; puts hash if ("2013-08-23".."2013-09-26").cover?(date)' 

給我:

 
3eddb854eaea971e9a60147153f0f3c9be4f1a5a 
dfeefd4715c4fddef0957c5aff238c525bb1def6 
db654badb97f3784286171d4645e9face6a42865 
62cdba07e6ae0cd28752491a83f584d3e18a5619 
7643a0458a54200f8944583d66c089d63c1bf688 
23b720852a36e959d0f45f9d11f05d4aa7ee0cb9 
f729ec9c5bf37ee0284a8db47cbc79a0b53145bb 
bc2d647ae86fbff1246ba163a5a99d25ed2f3523 
a0752b3cbae39698449be953153ddaafe35c054c 
8e88fffc75cbdda333c86cb4f5eb9b5b30263c27 

不幸的是,git log 3eddb854eaea971e9a60147153f0f3c9be4f1a5a..8e88fffc75cbdda333c86cb4f5eb9b5b30263c27不能保證工作,因爲這些提交可能在不同的分支。

讓我們來解釋一下我做的:

  1. --format="%ad %H" - 格式的日誌作爲author_date commit_hash
  2. --date=iso - - 2012年YY-mm-dd HH:MM:SS格式
  3. sort - Unix命令其中的字母順序排列線;它適用於ISO格式的日期排序
  4. ruby -ane - 執行ruby腳本。 -n表示對每一行執行,-a分割這些行並將字段放入$F數組中,-e精簡腳本以執行
  5. ("2011-02-23".."2011-02-26").cover?(date) - 從兩個字符串創建範圍並檢查日期是否適合它(以字母順序的含義,我們沒有解析這些日期)

我不知道下一步該怎麼做(爲了給你更好的日誌),但很高興把你移到這一點。

10
git log --format=format:"%ai %aE %s" 

然後通過AuthorName和/或日期grep!

1

我有時想知道某個日期由我自己創建的提交。爲此我使用git log --all --author=jpo --format="%ai %s" |grep -E ^2015-09-01。不幸的是,這種方法不適用於通過日期範圍進行過濾,但對於問題中使用的範圍它可以很容易地完成:git log --all --author=jpo --format="%ai %s" |grep -E ^2012-12-(0.|10)如果您想了解除作者日期和提交消息之外的更多提交信息,只需將更多參數添加到格式字符串(檢查git help log頁面的PRETTY FORMATS部分)。