将旧代码推送到git存储库

时间:2011-06-29 02:51:26

标签: git

我是git的新手。我的服务器上有远程git repo,它包含master,这是我代码的当前版本。在我的本地计算机上,我使用旧版本(大约10个)的代码只是在我使用版本控制之前存储在其他位置(只是普通文件)。

即使我可能永远不会再需要旧版本,我仍然希望将它们添加到回购中,所以如果我想查看旧版本,我可以这样做。

那么我该怎么做呢,我把它们添加为分支或标签,我该如何将它们添加到远程仓库呢?

现在我这样做:只删除所有当前版本代码(已提交并推送到服务器),复制并粘贴旧代码文件(比如版本0.2)并创建新分支(版本0.2),提交然后推送到服务器。现在我有2个分支,master和version0.2。这应该是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

你能做什么:

  1. 查找所有旧版本并按年龄对其进行排序
  2. 在最旧的存储库中创建存储库并提交
  3. 将所有文件替换为第二个最旧的版本并提交
  4. 重复,直到您提交所有版本
  5. 从远程仓库的克隆中,拉出这个新的存储库
  6. 通过保留最新版本并提交
  7. 来解决合并冲突

    或者如果您是远程存储库的唯一用户,则在旧版本的顶部应用远程仓库中的最新提交,并替换远程仓库更加清晰。

答案 1 :(得分:1)

你的系统很好,但是如果旧的代码实际上导致master的位置,那么一旦所有代码都在存储库中,我建议将所有内容拼接成一个分支。我假设这是一个私有存储库,并且与master混在一起不会影响任何其他人(在公共存储库上重写历史记录并不好)。

话虽如此,我还假设你有一堆类似于以下分支的分支:

  1. V0.1
  2. V0.2
  3. V0.3
  4. 在这种情况下,v0.1是最早的,v0.2建立在v0.1之上,依此类推。为了实际让master代表这个,我建议按顺序重新分支,以便在最后master包含来自所有分支的代码。执行此操作的步骤是:

    1. git checkout v0.2
    2. git checkout -b REBASE_v0.2
      • 通过创建一个名为REBASE的新分支,这里我们不会影响原始的v0.2分支。如果出现问题,我们总是可以恢复原来的分支。
    3. git rebase v0.1
    4. 解决任何冲突。
    5. 如果您在每个文件的v0.1和v0.2 git rm FILE之间删除了任何文件。
    6. git checkout v0.3
    7. git checkout -b REBASE_v0.3
    8. git rebase REBASE_v0.2
    9. 解决任何冲突
    10. 如果您在每个文件的v0.2和v0.3 git rm FILE之间删除了任何文件。
    11. 为您导入的任何其他版本分支进行冲洗并重复步骤6-10。
    12. git checkout master
    13. git checkout -b REBASE_master
    14. git rebase REBASE_v0.3
    15. 解决任何冲突
    16. git diff master
      • 假设所有冲突都得到了正确解决,这应该没有差异。
    17. git checkout master
    18. git branch master_old
    19. git reset --hard REBASE_master
    20. git branch -D REBASE_v0.2 REBASE_v0.3 REBASE_master
      • 摆脱rebase分支
    21. 一旦你确定一切都很好,你就可以继续摆脱原来的分支:git branch -D v0.1 v0.2 v0.3 master_old

      此时您应该拥有一个包含实际代码进度的主分支。