剪切后连接 git 条历史记录

Connect git historys after cut

我的两个回购来自同一个项目。我在提交 3 后创建了一个历史记录,现在只使用 Repo ProjectnameWorking.

git log 回购 "ProjectnameArchiv":

30114b2afac5d1c5a968441151ee8f91fc015ff3 4
9aa472d04501a14b5b704fde32445461f99f539a 3
1d0e5abe5daf60c0d86819938ba1aefd44b87ff5 2
766f4880e8ccf61bdc718dfae62466f800ae8119 1

git 日志 回购 "ProjectnameWorking":

2932c4b8ea681f0a97bf151ccc46d2044e8e5a50 5
27ec1a4618f1bf0025b8ba83fd69c2607cdf78d4 4

有没有办法稍后将历史记录和项目文件连接到一个?

git 日志 回购 "Projectname"

2932c4b8ea681f0a97bf151ccc46d2044e8e5a50 5
27ec1a4618f1bf0025b8ba83fd69c2607cdf78d4 4
9aa472d04501a14b5b704fde32445461f99f539a 3
1d0e5abe5daf60c0d86819938ba1aefd44b87ff5 2
766f4880e8ccf61bdc718dfae62466f800ae8119 1

编辑:

是的,这是可能的,但其中一个项目的 SHA 会发生变化:

  • 创建一个公共远程仓库:

    /some/other/path> git init . --bare
    
  • ProjectnameArchiv9aa472d04501a14b5b704fde32445461f99f539a 创建一个分支并将其推送到远程:

    ProjectnameArchiv> git branch merge-base 9aa472d04501a14b5b704fde32445461f99f539a
    ProjectnameArchiv> git remote add origin file:///some/other/path
    ProjectnameArchiv> git push --all
    
  • 在另一个 repo 中执行相同操作,但获取而不是推送:

    ProjectnameWorking> git branch working-top 2932c4b8ea681f0a97bf151ccc46d2044e8e5a50
    ProjectnameWorking> git remote add origin file:///some/other/path
    ProjectnameWorking> git fetch origin
    
  • cherry-pick 归档分支中的第一个工作提交:

    ProjectnameWorking> git checkout -b archive origin/merge-base
    ProjectnameWorking> git cherry-pick 9aa472d04501a14b5b704fde32445461f99f539a
    
  • 如果你只有几个提交,你可以继续挑选,但对于更大的数量,rebase-ing 其余的工作分支到存档分支更快:

    ProjectnameWorking> git rebase --onto archive 9aa472d04501a14b5b704fde32445461f99f539a working-top
    

    您可以添加 git 的 -i 选项以在它开始之前检查它在做什么,并在出现问题时中断该过程。

之后,工作存储库的更改将添加到存档存储库,但它们会获得新的 SHA。