簡體   English   中英

Git 日志:顯示特定作者的提交 + 所有作者的標簽

[英]Git log: Show commits by specific author + tags by all authors

我們使用 git 標簽來標記我們的版本。

我目前正在使用git log --author="Steve"來獲取某個作者的所有提交。 除此之外,我想看看這些提交中的哪些屬於哪個版本。 出於這個原因,我還想顯示所有標簽(最好是在提交之間)我怎樣才能做到這一點?

我相信您要問的是:我該如何展示:

  • 史蒂夫的所有提交,加上
  • 任何帶標簽的提交及其標簽

這很困難,因為 --author --author=Stevegit log限制為僅顯示作者為 Steve 的提交,無論在修訂過程中遇到哪些提交。 Adam 在評論中建議--decorate將無濟於事:標記的提交——那些會用你想看到的標簽裝飾的提交——如果它們不是由 Steve 創作的,則會被省略

你需要做的是:

  • 枚舉史蒂夫創作的所有提交(例如,將他們的 hash ID 保存在某處),然后
  • 枚舉所有被標記的提交(同時保存它們的hash ID),然后
  • 在此 hash ID 列表上運行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做到這一點,但我相信足夠復雜的圖表也可以解決這個問題。

因此,為了正確識別“包含”或“描述”特定史蒂夫提交的標簽,我們應該:

  1. 枚舉所有史蒂夫提交。 將 hash ID 的列表放在某處的輸入中(例如,臨時文件)。 (使用git rev-list --author=Steve HEAD或類似的;適當地選擇你的起點。)

  2. 使用git log --no-walk顯示每個這樣的提交,但也使用git describe --contains描述每個提交相對於 Git 可以找到的最佳標簽

由於可以輕松控制保存在臨時文件中的 hash ID 的枚舉,因此您可以簡單地運行這兩個命令中的每一個( git log --no-walk $hashgit describe [options] $hash )在每次提交時,一次一個。 您現在知道哪個標簽描述(可選且可能需要,“包含”)每個 Steve 提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM