我想獲取主分支的所有提交哈希 ID。但是,使用以下命令只有最新的提交 ID 與結果匹配。舊的提交哈希 ID 不屬于主分支。有沒有其他方法可以讓提交哈希 ID 只屬于主分支?
git rev-parse origin/master --all
uj5u.com熱心網友回復:
Git 中的“分支”僅指向(單個!)提交,并在進行新提交時自動向前移動。一次提交可以指向 0、1、2 甚至更多的父提交。如果可以從分支的尖端或頭部到達,則稱提交是“在分支上” 。這意味著一旦一個分支被合并到另一個分支中,它就會成為那個分支的一部分。
要獲取分支的所有提交 ID 的串列,您可以使用git rev-list branchname. 當然,這也包括從其他分支合并的提交。如果你總是朝著同一個方向合并,你可能會說只有每個提交的第一個父級才是重要的并且與你相關。在這種情況下,您可以過濾修訂串列以僅顯示可通過第一個父提交訪問的提交。為此,請--first-parent為上述命令指定標志。
uj5u.com熱心網友回復:
OP評論...
就我而言,這也顯示了分支的提交哈希 ID
tl;博士使用git rev-list master --first-parent。
在 Git 中,提交不屬于一個分支。提交相互連接。分支只是指向該分支最新提交的標簽。
相反,可以從分支訪問提交。
例如,假設您擁有 master 和 master 分支的功能。看起來像這樣。
A - B - C - D - E [master]
\
F - G - H [feature]
master只是一個指向提交 Efeature的標簽。只是一個指向提交 H 的標簽。
如果你git log master會得到 A、B、C、D、E;他們可以從主人那里得到。如果你git log feature會得到 A、B、C、F、G、H;他們可以通過功能訪問。
如果您只想查看提交可達的功能,而不是與 master 共享的功能,請使用git log master..feature. 這將顯示 (A, B, C, F, G, H) - (A, B, C, D, E) 或 F, G, H。
有關更多資訊,請參閱gitrevisions。
將特征合并到母版并洗掉特征后,它看起來像這樣。
$ git checkout master
$ git merge feature
$ git branch -d feature
A - B - C - D - E - M [master]
\ /
F - G - H
如果你git log master會得到 A、B、C、D、E、F、G、H、M;無論它最初致力于哪個分支,都可以從 master 到達。
您可以使用 來查看這些連接和標簽git log --graph --decorate。
但是我們可以得到可能是對 master 的原始提交。
在上面的例子中,合并提交 M 連接到兩個提交,它有兩個“父母”:E 和 H。它們有一個順序。第一個是合并到 (master) 的分支,第二個是合并到 (feature) 的分支。
如果您只遵循第一個父提交,您將只獲得對 master 的提交:A、B、C、D、E、M。使用--first-parent. 兩者git-log兼git rev-list取--first-parent。
git log --first-parent --oneline master
或者
git rev-list --first-parent master
不能保證這會產生對 master 的原始提交,但是如果您遵循將分支合并到 master 的中央分支作業流程,它會。更復雜的作業流程可能會改變父級的順序。
uj5u.com熱心網友回復:
您可以master通過運行以下命令獲取特定分支(例如)的哈希值:
git log --pretty=%H master
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395515.html
