Connect git historys after cut

别说谁变了你拦得住时间么 提交于 2019-12-23 02:57:23

问题


My two repos are from the same project. I make a history cut after commit 3 and work now only with Repo ProjectnameWorking.

git log Repo "ProjectnameArchiv":

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

git log Repo "ProjectnameWorking":

2932c4b8ea681f0a97bf151ccc46d2044e8e5a50 5
27ec1a4618f1bf0025b8ba83fd69c2607cdf78d4 4

Is there a way to connect later both historys & projectfiles to one?

git log Repo "Projectname"

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

Edit:

  • Commit 4 at Repo "ProjectnameArchiv" - get new hash from cut

回答1:


Yes, that is possible, but the SHAs of one of the projects will change:

  • Create a common remote repository:

    /some/other/path> git init . --bare
    
  • Create a branch in ProjectnameArchiv at 9aa472d04501a14b5b704fde32445461f99f539a and push it to the remote:

    ProjectnameArchiv> git branch merge-base 9aa472d04501a14b5b704fde32445461f99f539a
    ProjectnameArchiv> git remote add origin file:///some/other/path
    ProjectnameArchiv> git push --all
    
  • Do the same in the other repo but fetch instead of push:

    ProjectnameWorking> git branch working-top 2932c4b8ea681f0a97bf151ccc46d2044e8e5a50
    ProjectnameWorking> git remote add origin file:///some/other/path
    ProjectnameWorking> git fetch origin
    
  • cherry-pick the first working commit into the archive branch:

    ProjectnameWorking> git checkout -b archive origin/merge-base
    ProjectnameWorking> git cherry-pick 9aa472d04501a14b5b704fde32445461f99f539a
    
  • If you have only a few commits you can continue cherry-picking, but for a larger number, rebase-ing the rest of the work branch onto the archive branch is faster:

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

    You might add git’s -i option to check what it is doing before it starts, and interrupt the process if something went wrong.

After that, the changes of the working repository are added to the archive repository but they get new SHAs.



来源:https://stackoverflow.com/questions/51532479/connect-git-historys-after-cut

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!