[英]When undoing a git rebase with reflog, does it matter which commit you choose?
在嘗試重新建立基礎之前,我知道功能分支(GL18)的提交是(b7104e0),但提交工作很差。 我正在Eclipse中瀏覽Git Reflog,它多次列出了提交b7104e0。 我想將GL18的頭部重設為b7104e0。 我在reflog中選擇重置哪個b7104e0提交是否重要,還是全部相同?
使用提交消息,提交作者,提交日期,樹哈希和所有父提交哈希計算git哈希,有關詳細信息,請參閱有關Git提交的解剖結構的此博客文章 。
這意味着您看到的具有相同哈希值的每個提交都是完全相同的提交。 您可以使用任何這些。 實際上,如果您重置,則重置為提交哈希: git reset --hard b7104e0
。
不,但只是為了清楚起見,因為標題和正文似乎一開始會提出不同的問題,所以讓我們在此處明確說明一下:
任何提交(或b7104e0
至是git中的任何存儲庫對象)的“真實名稱”是其SHA-1,在這種情況下,它以b7104e0
(但繼續輸入33個字符)。 此真實名稱唯一標識對象。 在這種情況下,只要較短的版本保持唯一,它可以縮寫為較短的名稱。
所有其他名稱,例如分支名稱,標簽,非常特殊的ref HEAD
,稍不特殊(但仍然特殊)的ORIG_HEAD
, MERGE_HEAD
, CHERRY_PICK_HEAD
等等,以及( finally :-))reflog條目,例如HEAD@{3}
或branchname @{1}
只是表達“真實名稱” SHA-1 ID的方法。 使用git checkout
或重寫參考名稱的命令時,此規則有一個特殊的豁免,但通常,名稱或reflog條目僅解析為ID。 許多名稱可能會解析為一個ID,或者通常只有一個名稱會解析為ID,但是這些名稱通常會解析為ID。 1個
擁有正確的ID后,無論如何獲取都無關緊要。
1僅出於完整性考慮:很明顯,如果我們要更改名稱的目標SHA-1 ID,例如,要移動分支或將新值寫入CHERRY_PICK_HEAD
,則需要該名稱,而不是其當前ID。 我們需要命名的另一個地方是使用間接 (“符號”)引用時,例如HEAD
名稱ref: refs/heads/master
,您就on branch master
因為git status
會將其放置。
我們還存在一種特殊情況,即名稱不解析為任何SHA-1 ID,這就是“尚未誕生的分支”,這在沒有提交的新存儲庫中最常見:在這種情況下,您在分支master
,但是refs/heads/master
無法解析為提交ID,因為還沒有提交。 如果您使用git checkout --orphan
創建一個(尚未)指向任何SHA-1的新分支(它將在下一次提交時獲取其初始SHA-1),則以后會再次出現這種特殊情況。 在這兩種奇怪的情況下,存在HEAD
引用,但命名了一個字面不存在的分支(尚未)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.