剪切后连接git历史记录

时间:2018-07-26 06:39:01

标签: git git-rewrite-history git-history

我的两个存储库来自同一项目。我在提交3之后进行了历史记录的切割,现在仅与Repo ProjectnameWorking 一起使用。

git log 回购“ ProjectnameArchiv”:

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

git log 回购“ ProjectnameWorking”:

2932c4b8ea681f0a97bf151ccc46d2044e8e5a50 5
27ec1a4618f1bf0025b8ba83fd69c2607cdf78d4 4

是否可以将以后的历史记录和项目文件都连接到一个?

git log 回购“项目名称”

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

编辑:

  • 在回购“ ProjectnameArchiv”上提交4-从剪切中获取新哈希

1 个答案:

答案 0 :(得分:1)

是的,这是可能的,但是其中一个项目的SHA将会改变:

  • 创建一个公共的远程存储库:

    /some/other/path> git init . --bare
    
  • ProjectnameArchiv的{​​{1}}中创建分支并将其推送到远程:

    9aa472d04501a14b5b704fde32445461f99f539a
  • 在另一个存储库中执行相同的操作,但获取而不是推送:

    ProjectnameArchiv> git branch merge-base 9aa472d04501a14b5b704fde32445461f99f539a
    ProjectnameArchiv> git remote add origin file:///some/other/path
    ProjectnameArchiv> git push --all
    
  • cherry-pick 第一次进入归档分支的工作提交:

    ProjectnameWorking> git branch working-top 2932c4b8ea681f0a97bf151ccc46d2044e8e5a50
    ProjectnameWorking> git remote add origin file:///some/other/path
    ProjectnameWorking> git fetch origin
    
  • 如果提交的次数很少,则可以继续进行挑选,但是对于较大的提交, rebase-ing 将工作分支的其余部分转移到archive分支的速度更快:< / p>

    ProjectnameWorking> git checkout -b archive origin/merge-base
    ProjectnameWorking> git cherry-pick 9aa472d04501a14b5b704fde32445461f99f539a
    

    您可以添加git的ProjectnameWorking> git rebase --onto archive 9aa472d04501a14b5b704fde32445461f99f539a working-top 选项以在开始之前检查它的作用,并在出现问题时中断该过程。

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