簡體   English   中英

Git Rebase創建非線性歷史記錄

[英]Git Rebase creating not linear history

Git倉庫只有一個母版,每個人都在做它(到目前為止,還不算是一件小事),默認情況下啟用了Rebase。 AFAIK git-rebase會根據日期逐一應用提交,並在此過程中需要時進入MERGING狀態,以重寫歷史記錄。 但是有一件事讓我和團隊感到煩惱,歷史有時並非一成不變,請參考以下示例:

在此處輸入圖片說明 在此處輸入圖片說明 在此處輸入圖片說明

這里會發生什么? 還是我誤會了git-rebase的工作原理?

歷史記錄不是基於日期,而是基於Git所基於的基礎圖。 例如,您的歷史記錄可能如下所示:

                  branchA
                    ↓
* -- * -- * -- * -- *
      \
       * -- * -- *
                 ↑
              branchB

每個*代表您的歷史記錄中的提交,但是實際日期與圖表中的位置完全無關。 讓我們用數字替換星星以顯示它們的相對創建時間 (稍后會創建更大的數字):

                  branchA
                    ↓
1 -- 2 -- 4 -- 5 -- 8
      \
       3 -- 6 -- 7
                 ↑
              branchB

這是每個分支上的完美歷史和“線性”(就時間而言)歷史。 如果你登錄為歷史branchA ,你得到8, 5, 4, 2, 1 ; branchB你會得到7, 6, 3, 2, 1

現在,如果你變基branchBbranchA ,Git的將改寫那些提交branchB ,並將其應用到branchA 重寫時, 默認情況下 ,Git保持編寫時間不變(但將提交時間重置為當前時間)。 這樣您將得到以下結果:

                  branchA
                    ↓
1 -- 2 -- 4 -- 5 -- 8 -- 3' -- 6' -- 7'
                                     ↑
                                  branchB

(這里的'表示它們實際上是與原始提交不同的提交,但是它們的內容和作者時間確實相同)。

如果現在查看branchB的日志,則會得到以下內容: 7', 6', 3', 8, 5, 4, 2, 1 branchB 這正是“時間悖論”的來源:您確實擁有完美的線性歷史記錄(該部分的圖形是線性的); 但是提交不一定按最初編寫的順序進行。

這是完全可以的,完全是設計使然的:變基處理不應完全重置提交,因此原始作者信息(誰做的以及他們什么時候做的)仍然存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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