[英]How to rebase git submodule preserving references to submodule commits from git repository containing the submodule?
(目前我正在修復我的舊存儲庫,然后才發布。)
我已經知道如何在git歷史中重寫提交作者的電子郵件和名稱 。
我有一個帶子模塊的git項目。 我想重寫這些子模塊的歷史記錄,但是因為我在開發過程中快速轉發這些子模塊,我想修改主git repo中指向某些子模塊的鏈接提交到指向子模塊rebase之后的新提交的鏈接。 即我需要將git子模塊與包含此子模塊的rebased git存儲庫結合使用。 (對不起,文字太久了,我不知道如何描述那么短。)
如何與包含子模塊的git存儲庫歷史記錄同步重寫git子模塊歷史記錄?
正如我在“ 重寫子模塊歷史后的子模塊存儲庫 ”中提到的,沒有簡單的解決方案。
您將不得不使用git filter-branch
重寫主倉庫的歷史記錄,尋找特定的提交,包括gitlink ( 索引中的特殊條目 )
首先需要在子模塊舊歷史的SHA1和主倉庫使用的gitlink之間建立對應關系
cd /submodule/repo/just/rewritten/
# the old history is still available in refs/original
git -C /path/to/rewritten/repo for-each-ref --format="%(refname)" refs/original
cd /main/repo
git for-each-ref --contains <SHA1> # SHA being a SHA1 from the old submodule history
然后你需要更換
git filter-branch --prune-empty --tree-filter 'change_gitlink'
change_gitlink
將是一個進入子模塊文件夾的腳本(因此--tree-filter
,而不是--index-filter
),簽出新的SHA1(來自子模塊的新歷史記錄)。 過濾器分支將提交新的repo狀態,包括新的gitlink(因為子模塊已在右側的新SHA1中檢出)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.