【问题标题】:Connect git historys after cut剪切后连接git历史
【发布时间】:2018-07-26 06:39:01
【问题描述】:

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

git log Repo "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

编辑:

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

【问题讨论】:

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


    【解决方案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 中做同样的事情,但是 fetch 而不是 push:

      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。

    【讨论】:

    • 如果我尝试 git checkout -b archive origin/merge-base 我得到错误:fatal: Cannot update paths and switch to branch 'archive' 同时。您是否打算签出无法解析为提交的“origin/merge-base”?
    • @Gh0stscript git branch --list --remotes 的输出是什么?
    • ProjectnameWorking> git branch --list --remotes origin/master
    • 推送存档时,您可能需要添加--all 开关。我更新了答案。
    • 我意识到提交 4 在两个项目中(更新问题)...所以我不知道来自 git rebase --onto archive 9aa472d04501a14b5b704fde32445461f99f539a working-top 的错误是否来了由此。错误:CONFLICT (add/add): Merge conflict in Test.txt Patch failed at 0001 4 失败的补丁副本位于:.git/rebase-apply/patch
    猜你喜欢
    • 2013-10-23
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多