1

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

git log回购“项目名称存档”:

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

git log回购“项目名称工作”:

2932c4b8ea681f0a97bf151ccc46d2044e8e5a50 5
27ec1a4618f1bf0025b8ba83fd69c2607cdf78d4 4

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

git log回购“项目名称”

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

编辑:

  • 在 Repo“ProjectnameArchiv”提交 4 - 从 cut 获取新哈希
4

1 回答 1

1

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

  • 创建一个通用的远程仓库:

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

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

    ProjectnameWorking> git branch working-top 2932c4b8ea681f0a97bf151ccc46d2044e8e5a50
    ProjectnameWorking> git remote add origin file:///some/other/path
    ProjectnameWorking> git fetch origin
    
  • 挑选第一个工作提交到存档分支:

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

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

    您可以添加 git 的-i选项以在启动之前检查它在做什么,如果出现问题则中断该过程。

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

于 2018-07-26T07:29:23.030 回答