簡體   English   中英

獲取所有分支的日期,哈希和分支名稱

[英]Get date, hash and branch name of all branches

以下命令列出了我所有本地分支的最后一個提交哈希和分支名稱:

git show-ref --heads

輸出:

<hash> <branch-1>
<hash> <branch-2>
...
<hash> <branch-n>

但是,我想查看每個分支的日期。 以下命令僅顯示當前分支上的日期和哈希值,但不顯示上次提交的分支名稱:

git log -1 --format="%ci %H"

輸出:

<date> <hash>

我怎樣才能得到兩者結合的結果?

<date> <hash> <branch-1>
<date> <hash> <branch-2>
...
<date> <hash> <branch-n>

我使用的是Windows 10,沒有花哨的命令環境,只是基本的命令提示符。

我能夠稍微調整這個偉大的GitHub帖子以獲得以下內容:

$ for branch in `git branch | grep -v HEAD`;do echo -e
      `git show --format="%ci %cr %H" $branch | head -n 1` \\t$branch; done | sort -r

輸出:

2017-03-07 11:38:38 +0800 2 hours ago 87ed1306a1c06576043cd398097a1dc0ec456632 branch1
2017-03-07 02:50:06 +0000 3 hours ago 577fe106a9eb5763cbfd5bce87cfa9448ef52ca8 master
2017-03-07 02:50:06 +0000 3 hours ago 577fe106a9eb5763cbfd5bce87cfa9448ef52ca8 branch2
2017-03-03 17:07:05 +0800 4 days ago 419a23b246ad932c9659b70fded4b1362e92d884  branch3

沒有“分支日期”這樣的東西。 或者,也許有太多的東西。 你需要選一個。

具體來說,分支名稱只是某個特定提交的名稱,名稱具有一些特殊屬性(您可以將該名稱git checkout “獲取”在分支上),並且一旦在分支上,您可以git commit創建一個新的提交並更新name-to-hash-ID條目。

提交自己確實有約會。 更准確地說,它們有兩個時間戳,一個用於作者,一個用於提交者。 由於分支名稱(masterdevelop命名一個特定提交,因此您可以檢索這些提交時間戳中的任何一個並將其用作日期。 但是如果我們將分支標簽移動到另一個不同的提交,這個日期將會改變,也許會倒退。 如果兩個不同的分支名稱指向同一個提交,則兩者都必須具有相同的提交時間戳。

分支 - 事實上,幾乎所有 Git引用:分支名稱,標記名稱,特殊名稱(如stash ,甚至HEAD本身)也有reflog ,每個reflog條目記錄何時以及為什么某些內容更改了該引用:

8dbdf33 HEAD@{11}: reset: moving to HEAD^
70ac787 HEAD@{12}: cherry-pick: change default python path for FreeBSD
8dbdf33 HEAD@{13}: checkout: moving from diff-merge-base to stash-exp

這也是:

8dbdf33 HEAD@{6 weeks ago}: reset: moving to HEAD^
70ac787 HEAD@{6 weeks ago}: cherry-pick: change default python path for FreeBSD
8dbdf33 HEAD@{6 weeks ago}: checkout: moving from diff-merge-base to stash-exp

這些reflog條目最終會到期,通常在30到90天之后(取決於reflog條目指定的提交或其他對象是否可以從引用的當前值訪問 ),但在此之前,某些reflog條目或條目可能符合條件“分支日期”。

Tim Biegeleisen的回答可以從每個分支名稱所指向的提交中獲取提交者時間戳。 在PRETTY FORMATS部分下的git log文檔包括,例如:

%ci :提交者日期,類似ISO 8601的格式

對於健壯的腳本,我建議替換:

for branch in `git branch | grep -v HEAD`

有:

for branch in $(git for-each-ref --format='%(refname:short)' refs/heads)

雖然(或類似的東西 - 例如,可以在for-each-ref直接完成更多的工作)。

暫無
暫無

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

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