簡體   English   中英

當使用reflog撤消git rebase時,選擇哪個提交有關系嗎?

[英]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_HEADMERGE_HEADCHERRY_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM