# git-describe
> 原文: [https://git-scm.com/docs/git-describe](https://git-scm.com/docs/git-describe)
## 名稱
git-describe - 根據可用的ref給對象一個人類可讀的名稱
## 概要
```
git describe [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>…?]
git describe [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
git describe <blob>
```
## 描述
該命令查找可從提交訪問的最新標記。如果標記指向提交,則僅顯示標記。否則,它將標記名稱后綴為標記對象頂部的附加提交數和最近提交的縮寫對象名稱。結果是一個“人類可讀”的對象名稱,它也可用于標識對其他git命令的提交。
默認情況下(不帶--all或--tags)`git describe`僅顯示帶注釋的標簽。有關創建帶注釋標簽的更多信息,請參閱 [git-tag [1]](https://git-scm.com/docs/git-tag) 的-a和-s選項。
如果給定對象引用blob,則將其描述為`<commit-ish>:<path>`,以便可以在`<commit-ish>`中的`<path>`處找到blob,它本身描述了在反向修訂中出現此blob的第一次提交從HEAD步行。
## OPTIONS
```
<commit-ish>…?
```
要描述的Commit-ish對象名稱。如果省略,則默認為HEAD。
```
--dirty[=<mark>]
```
```
--broken[=<mark>]
```
描述工作樹的狀態。當工作樹與HEAD匹配時,輸出與“git describe HEAD”相同。如果工作樹具有本地修改,則附加“-dirty”。如果存儲庫已損壞并且Git無法確定是否存在本地修改,則Git將出錯,除非給出“--broken”,而后綴為“-broken”。
```
--all
```
不要只使用帶注釋的標簽,而是使用`refs/`命名空間中的任何引用。此選項可以匹配任何已知分支,遠程跟蹤分支或輕量級標記。
```
--tags
```
不使用帶注釋的標簽,而是使用`refs/tags`命名空間中的任何標簽。此選項可以匹配輕量級(非注釋)標記。
```
--contains
```
而不是找到提交之前的標記,找到提交后出現的標記,從而包含它。自動暗示--tags。
```
--abbrev=<n>
```
不使用默認的7個十六進制數字作為縮寫對象名稱,而是使用< n>數字,或形成唯一對象名稱所需的數字。 < n> 0將禁止長格式,僅顯示最接近的標記。
```
--candidates=<n>
```
而不是僅僅考慮10個最近的標簽作為描述輸入提交的候選者,而是考慮到< n>。候選人。增加< n>超過10將需要稍長但可能產生更準確的結果。 < n>為0將導致僅輸出完全匹配。
```
--exact-match
```
僅輸出完全匹配(標記直接引用提供的提交)。這是--candidates = 0的同義詞。
```
--debug
```
詳細顯示有關用于標準錯誤的搜索策略的信息。標簽名稱仍將打印到標準輸出。
```
--long
```
即使與標記匹配,也始終輸出長格式(標記,提交數和縮寫提交名稱)。當您想要在“describe”輸出中查看提交對象名稱的某些部分時,這很有用,即使有問題的提交恰好是標記版本。它不會僅僅發出標記名稱,而是將這樣的提交描述為v1.2-0-gdeadbee(自標記v1.2以來第0次提交指向對象deadbee ...)。
```
--match <pattern>
```
僅考慮與給定`glob(7)`模式匹配的標記,不包括“refs / tags /”前綴。如果與`--all`一起使用,它還會考慮與模式匹配的本地分支和遠程跟蹤引用,分別排除“refs / heads /”和“refs / remotes /”前綴;從不考慮其他類型的參考。如果多次給出,將累積模式列表,并且將考慮匹配任何模式的標簽。使用`--no-match`清除和重置模式列表。
```
--exclude <pattern>
```
不要考慮與給定`glob(7)`模式匹配的標記,不包括“refs / tags /”前綴。如果與`--all`一起使用,它也不會考慮與模式匹配的本地分支和遠程跟蹤引用,分別排除“refs / heads /”和“refs / remotes /”前綴;從不考慮其他類型的參考。如果多次給出,則將累積模式列表,并且將排除匹配任何模式的標簽。與--match結合使用時,如果標記與至少一個匹配模式匹配且與任何--exclude模式不匹配,則會考慮使用該標記。使用`--no-exclude`清除和重置模式列表。
```
--always
```
將唯一縮寫的提交對象顯示為后備。
```
--first-parent
```
在看到合并提交時,僅遵循第一個父提交。當您希望不匹配目標提交歷史記錄中合并的分支上的標記時,這非常有用。
## 例子
有了類似git.git當前樹的東西,我得到:
```
[torvalds@g5 git]$ git describe parent
v1.0.4-14-g2414721
```
即我的“父”分支的當前頭部基于v1.0.4,但由于它上面有一些提交,因此describe添加了額外提交的數量(“14”)和提交的縮寫對象名稱本身(“2414721”)在最后。
附加提交的數量是“git log v1.0.4..parent”顯示的提交數。哈希后綴是父項提示提交的“-g”+ 7-char縮寫(即`2414721b194453f058079d897d13c4e377f92dc6`)。 “g”前綴代表“git”,用于根據管理軟件的SCM描述軟件版本。這在人們可能使用不同SCM的環境中很有用。
在標簽名稱上執行 _git describe_ 只會顯示標簽名稱:
```
[torvalds@g5 git]$ git describe v1.0.4
v1.0.4
```
使用--all,該命令可以使用分支頭作為引用,因此輸出也顯示引用路徑:
```
[torvalds@g5 git]$ git describe --all --abbrev=4 v1.0.5^2
tags/v1.0.0-21-g975b
```
```
[torvalds@g5 git]$ git describe --all --abbrev=4 HEAD^
heads/lt/describe-7-g975b
```
將--abbrev設置為0,該命令可用于查找最接近的標記名,不帶任何后綴:
```
[torvalds@g5 git]$ git describe --abbrev=0 v1.0.5^2
tags/v1.0.0
```
請注意,如果今天鍵入這些命令,您獲得的后綴可能比Linus在運行這些命令時看到的更長,因為您的Git存儲庫可能有新的提交,其對象名稱以975b開頭,當時不存在,并且“ - g975b“單獨的后綴可能不足以消除這些提交的歧義。
## 搜索策略
對于每個提交的提交, _git describe_ 將首先查找標記該提交的標記。帶注釋的標簽將始終優先于輕量級標簽,具有較新日期的標簽將始終優先于具有較舊日期的標簽。如果找到完全匹配,將輸出其名稱并停止搜索。
如果未找到完全匹配, _git describe_ 將返回提交歷史記錄以找到已標記的祖先提交。祖先的標記將與輸入commit-ish的SHA-1的縮寫一起輸出。如果指定了`--first-parent`,則walk將僅考慮每個提交的第一個父級。
如果在步行期間發現多個標簽,則將選擇并輸出具有與輸入commit-ish不同的最少提交的標簽。這里提交的最小不同定義為`git log tag..input`顯示的提交數量將是可能的最小提交數量。
## BUGS
無法描述樹對象以及不指向提交的標記對象。在描述blob時,忽略指向blob的輕量級標記,但blob仍被描述為< committ-ish>:< path>盡管輕量級標簽是有利的。
## GIT
部分 [git [1]](https://git-scm.com/docs/git) 套件
- git
- git-config
- git-help
- git-init
- git-clone
- git-add
- git-status
- git-diff
- git-commit
- git-reset
- git-rm
- git-mv
- git-branch
- git-checkout
- git-merge
- git-mergetool
- git-log
- git-stash
- git-tag
- git-worktree
- git-fetch
- git-pull
- git-push
- git-remote
- git-submodule
- git-show
- git-log
- git-shortlog
- git-describe
- git-apply
- git-cherry-pick
- git-rebase
- git-revert
- git-bisect
- git-blame
- git-grep
- gitattributes
- giteveryday
- gitglossary
- githooks
- gitignore
- gitmodules
- gitrevisions
- gittutorial
- gitworkflows
- git-am
- git-format-patch
- git-send-email
- git-request-pull
- git-svn
- git-fast-import
- git-clean
- git-gc
- git-fsck
- git-reflog
- git-filter-branch
- git-instaweb
- git-archive
- git-bundle
- git-daemon
- git-update-server-info
- git-cat-file
- git-check-ignore
- git-checkout-index
- git-commit-tree
- git-count-objects
- git-diff-index
- git-for-each-ref
- git-hash-object
- git-ls-files
- git-merge-base
- git-read-tree
- git-rev-list
- git-rev-parse
- git-show-ref
- git-symbolic-ref
- git-update-index
- git-update-ref
- git-verify-pack
- git-write-tree