【问题标题】:merging the changes from two repositories in github合并 github 中两个存储库的更改
【发布时间】:2016-03-23 13:45:01
【问题描述】:

我有一个项目的 git repo。由于代码库中存在一些问题并且很难识别和修复,为了赶上最后期限,我在本地机器上创建了一个新项目并开始重新开发整个应用程序。开发完成后,我运行git init命令,然后运行git remote add origin <path to the original repo>

当我尝试推送更改时,git 不允许我推送更改,我收到的消息是 you need to at least perform a single commit。不知何故,我不得不保护我的更改并在服务器上创建另一个临时存储库,最后将我的更改推送到新存储库。

我需要将我的新 repo 更改移动到我的原始 repo,最好是在新分支上。我怎样才能完成这项工作?请告诉我完成此操作的步骤。

【问题讨论】:

  • 您在尝试推送更改之前提交了您的工作吗?这里可能会出现多个问题。
  • 在推送更改之前,我已将更改提交到本地存储库。
  • 使用新仓库中的git push -u oldrepo branchname

标签: git github


【解决方案1】:

这对 git 来说不是问题。查看答案here。对你来说,这将是:

cd <<original_repo>>
git remote add new_repo <<url_to_new_repo>>
git fetch new_repo
git push origin refs/remotes/new_repo/master:refs/heads/new_repo_master

这将在 origin 中创建一个名为 new_repo_master 的新分支,其中包含来自新存储库中 master 分支的提交。

【讨论】:

    【解决方案2】:

    有两种可能的解决方案,

    子模块

    要么将存储库 A 复制到较大项目 B 中的单独目录中,要么(也许更好)将存储库 A 克隆到项目 B 中的子目录中。然后使用 git submodule 将此存储库设置为 子模块 存储库 B.

    对于松散耦合的存储库来说,这是一个很好的解决方案,其中存储库 A 中的开发仍在继续,开发的主要部分是 A 中的单独独立开发。另请参阅 Git Wiki 上的 SubmoduleSupportGitSubmoduleTutorial 页面。

    子树合并

    您可以使用 subtree merge 策略将存储库 A 合并到项目 B 的子目录中。 Markus Prinz 在Subtree Merging and You 中对此进行了描述。

    git remote add -f Bproject /path/to/B
    git merge -s ours --no-commit Bproject/master
    git read-tree --prefix=dir-B/ -u Bproject/master
    git commit -m "Merge B project as our subdirectory"
    git pull -s subtree Bproject master
    

    或者您可以使用 apenwarr (Avery Pennarun) 的 git subtree 工具 (repository on github),例如在他的博客文章 A new alternative to git submodules: git subtree 中宣布。


    我认为在您的情况下(A 将成为更大项目 B 的一部分)正确的解决方案是使用 subtree merge

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 2018-02-20
      • 2015-03-24
      • 1970-01-01
      • 2021-12-16
      • 2023-03-22
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多