![](/img/trans.png)
[英]How to migrate a file and all its commit history to a new repo in git?
[英]git history gone - How to migrate older git repo to the new one after creating new project
我們有以下案例:
在不丟失 G2 上的新更改的情況下,將 git Histroy 從 G1 獲取到 G2 的最簡單方法是什么?
我假設您只是復制了 G1 的內容並從頭開始創建了一個新的存儲庫,否則您將擁有歷史記錄。
如果是這樣,在舊的 G1 之上重新設置 G2 就可以了。
我用我的一個項目測試了提供的場景,它產生了預期的效果。
1.在G2中,添加G1作為遙控器
git remote add G1 <Path>
2.拉G1
git pull G1 main
3. 在 G1 之上重新設置 G2
git rebase G1 main
此時,如果您可能會收到一條消息:
當前分支 main 是最新的。
如果是這樣,rebase 是安全的,所以:
git rebase -f G1 main
完畢
請注意,G2 將丟失其初始提交,因為現在初始提交將是來自 G1 的提交。 沒問題,因為內容應該是相同的。
檢查/測試項目,確保一切正常。
如果一切順利,強制推送 G2,因為重新提交的提交將更新其哈希值。
git push -f
在團隊中工作時要小心,只要確保沒有人有待推送的更改,要求人們刪除然后在此操作后再次克隆 repo。 由於這是一次性的事情,所以應該沒問題。
移除 G1 遙控器
git remote remove G1
測試
在我的場景中,結果如下:
* 0da12b8 (HEAD -> main) G2 Second Commit <--initial commit was lost
* f2dbe6e G1 Second Commit
* d93f003 G1 Initial commit
歷史從 G1 初始提交開始。 來自 G2 的提交應用於 G1 上最后一次提交的頂部,因此它們的祖先在該點被重置。
G2 上的初始提交丟失了,但沒關系,因為它的內容應該與 G1 上的最后一次提交相同。
這種方法假設 G1 是一個干凈的副本。
小費
為了避免這種情況,可以將具有歷史記錄的項目復制到新的存儲庫,如下所示:
git clone <A repo URL> project
cd project
git remote remove origin
git remote add origin <New repo URL>
git push -u origin main
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.