簡體   English   中英

git 歷史消失了 - 如何在創建新項目后將舊的 git repo 遷移到新的

[英]git history gone - How to migrate older git repo to the new one after creating new project

我們有以下案例:

  1. 我們在舊的 git Repo G1 上有一個舊的項目 P1
  2. 一段時間后,我們通過將舊的 P1 復制到新的新 git Repo G2 並在 P2 上添加更多內容並推送到 G2 來創建新項目 P2
  3. 一段時間后,我們注意到我們需要新項目 P2 中舊項目 P1 的 git History

在不丟失 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.

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