我看到git checkout HEAD~N在我的 git 歷史記錄中不會回傳 N 次提交的行為。
如果我的提交歷史看起來像這樣
git log --oneline -n 5
3ad352f (HEAD -> develop, origin/develop, asdf) commit message
93eeda7 Merged in branch (pull request #224)
911eb78 (origin/sdfa, asdf) Removes txt file
4b9de92 branch1
7a162e3 Merged in branch1 (pull request #223)
我做了一個git checkout HEAD~5我的理解是,我的 HEAD 應該指向 5 次提交前的提交。但是,當我運行此命令時,我看到如下內容:
$ git checkout HEAD~5
$ git rev-parse HEAD
49569625ffe9bfc13fdd4f1f5baab9a72ef7ca02
$ git rev-list --count `git rev-parse HEAD`..develop
13
看來我實際上是在 13 次之前檢查了一次提交,而不是像我預期的那樣是 5 次。
任何人都可以解釋發生了什么,以及我如何實際檢出 N 次提交前的提交?
uj5u.com熱心網友回復:
如果您打算結帳7a162e3 Merged in branch1 (pull request #223):
- 最簡單、明確的方法是運行
git checkout 7a162e3(你有 sha,使用它) - 如果你跑了
git log --oneline --graph -n 5,你可能會看到類似的東西:
3ad352f * (HEAD -> develop, origin/develop, asdf) commit message
93eeda7 * Merged in branch (pull request #224)
|\
911eb78 | * (origin/sdfa, asdf) Removes txt file
4b9de92 | * branch1
7a162e3 * Merged in branch1 (pull request #223)
(注意:根據您問題中的提交訊息,我不確定我是否了解您的回購的正確歷史記錄,請在您的終端中檢查您的提交是如何相關的)
如果歷史如上所述,從您的活動提交中計算“第一個父母”,您將計算HEAD~2(而不是HEAD~5)
<commit>~N將只遵循從 開始的一系列“第一父母” <commit>,而git log或git log --oneline沒有其他選項將列出(在平面串列中)來自合并分支的提交,這將“添加”到顯示的提交計數。
git log或者git rev-list兩者都有一個--first-parent選項,也可以將顯示的提交串列限制為這個“第一父母”序列:
git log --oneline --first-parent HEAD~5..HEAD # will list only 5 commits
git rev-list --count --first-parent HEAD~5..HEAD # will display '5'
我還強烈建議濫用 , 的--graph選項git log,以了解您看到的提交如何相互依賴:
git log --oneline --graph # you will have a view of what commits are merges,
# and what commits come from side branches
額外說明
由于HEAD(相當于HEAD~0)顯示在git log的輸出中,因此您在 中也會出現“逐一關閉”錯誤-n 5:在由 顯示的串列中git log -n 5,您最多會看到HEAD~4,而不是HEAD~5。
uj5u.com熱心網友回復:
“5 次提交前”意味著遵循當前提交的父譜系。您不能簡單地計算git log --oneline.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353643.html
上一篇:SO_MARK有效值
下一篇:如何從grep輸出中獲取提交
