在將更改推送到另一個存儲庫之前,我想要替換所有提交作者名稱和電子郵件。我需要做出更多的改變,並推薦他們以及替換作者。但同時我想在第一次回購時保留原作者。Git:在不更改歷史記錄的情況下替換所有提交作者
我發現了很多類似的問題,但他們都提出了重寫歷史的解決方案。這會在稍後進行更多提交時造成問題。
在將更改推送到另一個存儲庫之前,我想要替換所有提交作者名稱和電子郵件。我需要做出更多的改變,並推薦他們以及替換作者。但同時我想在第一次回購時保留原作者。Git:在不更改歷史記錄的情況下替換所有提交作者
我發現了很多類似的問題,但他們都提出了重寫歷史的解決方案。這會在稍後進行更多提交時造成問題。
我不認爲這是可能的。提交消息散列包括作者以及其他參數,因此您無法保持相同的提交併更改其作者。重寫歷史記錄是唯一的選擇。但是,您可以僅在第二個存儲庫中進行更改,而不是第一個。
要放大其他人所說的話:歷史是提交。提交由散列ID標識。哈希ID是提交內容的密碼校驗和。如果您在任何提交中更改了任何內容(甚至是單個位),則校驗和會發生變化,因此您有不同的提交,因此您擁有不同的歷史記錄。
有是在這一切的黑暗中一個潛在的光或兩個,雖然:
......所有這些表明正在改寫歷史的解決方案。這會在稍後進行更多提交時造成問題。
有兩種不同的意見,使這裏:
提交校驗,而密碼複雜,是完全確定的。這意味着如果你使相同的變化到相同的輸入,你得到相同的結果。因此,只要具有更改規則集和原始輸入,您就可以隨時構建舊到新散列ID的表格。
您可以使用這個舊的新映射來計算不同存儲庫的子圖的正確連接,一個只使用「舊」和一個使用舊和/或新的任意組合。那只是一個small matter of programming。 :-)根據你關心這個問題的多少,這絕對是可以解決的。請注意,在進行更改時,您必須使用完全確定性的過程 - 例如,您需要保持作者和提交日期不變,或以確定性方式更改它們。
根據git notes
,通常不需要做任何這些操作。而不是將舊提交複製到新提交,只需將註釋附加到舊提交。
鑑於SHA-1是在這個問題拋出現在technically breakable給予足夠的計算時間和/或金錢,它不再準確的說法「安全」,因此,「複雜」。不過,這還是不切實際的。
不,你不能這樣做。對舊提交更改**任何**(除了添加或刪除標籤)**將**更改它們的哈希值,從而更改歷史記錄。這是沒有辦法的。 –