[英]Git log: Show commits by specific author + tags by all authors
我們使用 git 標簽來標記我們的版本。
我目前正在使用git log --author="Steve"
來獲取某個作者的所有提交。 除此之外,我想看看這些提交中的哪些屬於哪個版本。 出於這個原因,我還想顯示所有標簽(最好是在提交之間)我怎樣才能做到這一點?
我相信您要問的是:我該如何展示:
這很困難,因為 --author --author=Steve
將git log
限制為僅顯示作者為 Steve 的提交,無論在修訂過程中遇到哪些提交。 Adam 在評論中建議的--decorate
將無濟於事:標記的提交——那些會用你想看到的標簽裝飾的提交——如果它們不是由 Steve 創作的,則會被省略。
你需要做的是:
git log --no-walk --stdin
--stdin。但我相信你的整體策略在這里有缺陷:
除此之外,我想看看這些提交中的哪些屬於哪個版本......
git log
命令必然“線性化”其 output。 也就是說,假設我們有以下分支和合並結構,較新的提交朝向右側,較舊的提交朝向左側:
o--●--o--o <-- tag: v1.X
/ \
...--o--o o--●--o--o <-- some-branch, tag: vZ.0
\ /
o--●--o--o <-- tag: vY.1
其中實心項目符號●
代表“史蒂夫提交”。 有三個這樣的提交,它們將以某種看起來隨機的順序發出,約束條件是最右邊的提交將在頂部和底部的提交之前出現。 output 是一次提交一次,但頂部和底部的項目符號提交實際上是平行的。
如果我們將標記的提交添加到 output,我們將看到版本 Z,然后是最右邊的史蒂夫提交。 然后我們會以某種順序看到版本 1.X 和 Y.1,其余兩個 Steve 提交以某種順序,但順序無法預測,並且版本標簽可能都在兩個有趣的 Steve 提交到來之前出現出去。 然后我們會推斷兩個 Steve 提交都在版本 1.X 中,或者兩者都在版本 Y.1 上,而實際上它們在兩個不同的版本中。
如果我們可以控制graph-walk order,我們可以做得更好。 雖然git log
可以在某種程度上使用--topo-order
做到這一點,但我相信足夠復雜的圖表也可以解決這個問題。
因此,為了正確識別“包含”或“描述”特定史蒂夫提交的標簽,我們應該:
枚舉所有史蒂夫提交。 將 hash ID 的列表放在某處的輸入中(例如,臨時文件)。 (使用git rev-list --author=Steve HEAD
或類似的;適當地選擇你的起點。)
使用git log --no-walk
顯示每個這樣的提交,但也使用git describe --contains
描述每個提交相對於 Git 可以找到的最佳標簽。
由於您可以輕松控制保存在臨時文件中的 hash ID 的枚舉,因此您可以簡單地運行這兩個命令中的每一個( git log --no-walk $hash
和git describe [options] $hash
)在每次提交時,一次一個。 您現在知道哪個標簽描述(可選且可能需要,“包含”)每個 Steve 提交。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.