[英]Git Rebase creating not linear history
歷史記錄不是基於日期,而是基於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
。
現在,如果你變基branchB
到branchA
,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.