當我git checkout 10bec0c打算只進行最后一次更改 (3) 但為什么包含 1 和 2 時?我用cherry-pick它也是一樣的。如何只獲得指定的一次提交?

uj5u.com熱心網友回復:
請嘗試為提交創建一個分支,git checkout 10bec0c temp_branch然后通過git log --oneline --graph --decorate.
uj5u.com熱心網友回復:
這取決于您所說的“獲取”是什么意思(如獲取指定的提交)。
這里的關鍵是,每個git的承諾持有的全面和完整的快照每一個檔案,該形式的檔案有你(或任何人)的時間為取得提交。1 換句話說,提交不存盤更改。
使用git checkout或git switch --detach檢出特定提交只需提取該提交,以便您在作業樹中擁有的檔案(您可以在其中查看和處理/處理檔案)是存盤在該快照中的檔案,因為它們存在在那一天和那個時間。
你可以,但是,查看提交的變化。這是有效的,因為每個提交都會記住其直接前一個提交(或提交,對于合并提交)的原始哈希 ID。根據您的查看器對此處顯示的三個提交進行排序的方式:
<image> 1 ff5cbab
<image> 2 ? 26b5656
<image> 3 ? 10bec0c
的前輩(或父級)26b5656是ff5cbab或10bec0c。我假設它在ff5cbab這里,即提交:
... <-ff5cbab <-26b5656 <-10bec0c [latest]
并且您的查看器將它們顯示為“顛倒”,例如git log --graph,與顯示最新的第一個而不是最后一個相比。
如果是這種情況,該命令git show 26b5656會導致 Git:
- 找到提交
26b5656; - 檢查從它出來的向后箭頭以找到前一個(或父)提交
ff5cbab; - 使用這兩個哈希 ID 將兩個提交都提取到臨時(記憶體)區域;進而
- 比較這兩個提交的快照。
對于每次提交中相同的每個檔案,這種比較根本沒有說明。對于每個不同的檔案,Git 會計算出某種方式將舊檔案轉換為新檔案。這是一個差異,即,將一個檔案更改為另一個檔案的方法。然后 Git 會顯示檔案名和配方。
你可以得到之間的差異任何對提交的使用git diff,通過給予雙方提交的哈希標識。如果您選擇父子對并按順序使用哈希 ID:
git diff <parent> <child>
您將獲得將父提交轉換為子提交的方法。如果你扭轉這些:
git diff <child> <parent>
你會得到一個將子節點變成父節點的方法——即你可以“撤銷”提交的方法。
1These snapshots are stored in a special Git-only format, in which files are compressed—sometimes highly compressed—and de-duplicated. So if you have a million commits, each of which contains a 10 megabyte file, but the 10 megabyte file is identical in all million commits, those one million 10 MB files consume ... 10 MB, or even less if the compression is good. It doesn't take the implied 10 terabytes, because it's been de-duplicated 999999 times.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360188.html
標籤:混帐
上一篇:當我運行“gitpush”時,我得到“您當前分支的提示在其遠程后面”但當前分支沒有上游跟蹤分支
下一篇:拒絕合并不相關的歷史
