2015-10-16 76 views
7

我試圖顯示在過去24小時內已添加到master分支的提交(不包括合併提交)。目前我使用此命令爲:在過去24小時內向主人添加的日誌提交

git log --format=format:%s --no-merges --since='24 hours ago' 

但是這有一個問題:如果提交的超過24小時,但合併到在過去的24小時內master分支,該命令將不會列出提交。是否有可能在過去24小時內向master分支顯示提交,而不是在過去24小時內創建的提交?

請注意我在一個乾淨的CI工作區執行此操作,所以git reflog不能幫助我。

在此先感謝!

+0

而不是'--no-merges',可能' - first-parent'會更好嗎? – ams

+0

@ams只會顯示合併提交。我需要未合併的提交,在過去24小時內添加到'master'分支。 – WonderCsabo

回答

3

我認爲rev-list是你想要的。

試試這個:

git rev-list --no-merges '^<24-hour-old-commit>' HEAD 

這應該列出所有的非合併提交是從提交HEAD到達的,但是從提交<24-hour-old-commit>不可達。

例如,在這個版本圖,它會列出大寫承諾,但不是小寫:

a - b - c - 24h - H - i - J - K - HEAD 
    \    /
     D - E - F - G ' 

提交HJKHEAD都是年輕的24小時以後。提交i也是比較年輕的,但是由於它是合併提交而被忽略。提交D,E,FG可能是任何年齡,但只在過去24小時內合併過,因此它們也被列出。


在上面的命令,--max-age--since選項都會有相同的問題,因爲你有git log,但它們可以被用來尋找<24-hour-old-commit>爲您提供:

git rev-list -n1 --before="24 hours" --first-parent HEAD 

也就是說,「給只有1個提交ID,必須至少24小時,並且位於當前分支「。

全部放在一起:

git rev-list --no-merges HEAD \ 
      --not $(git rev-list -n1 --before="24 hours" --first-parent HEAD) 

(注:--not abcdef是另一種說法^abcdef但它適用於所有以下參數,因此重新排序的選項。)

默認輸出rev-list只是原始版本,但您可以使用--pretty選項使其更像git log--pretty=short與您習慣的大致相同。

+0

但它不會很難腳本 - 目前我不知道如何,這是我也卡在哪裏。你介意闡述嗎?我認爲這是一個棘手的任務,我們必須找到在過去24小時內添加到'master'的第一個提交... – WonderCsabo

+0

我只是看着那個。儘快編輯。 :-) – ams

+0

添加的信息,請測試並回報。 :-) – ams

相關問題