git - 当我想从 git repo 中删除所有文件然后添加新文件时如何避免冲突

标签 git

(编辑问题:)

我在 github 中有 2 个存储库,这些存储库是 http://github.com/abc.githttp://github.com/xyz.git .

现在存储库“abc.git”是该项目的主要存储库。经过大约一个月的开发,我们发现我们可以通过制作可重用的代码来做得更好。所以我们决定为可重用的通用代码库创建一个新的 repo,即 xyz.git。所以现在我们有

  1. abc.git(非常具体的项目代码 + 外部模块 + “我们想要重写的代码”)
  2. xyz.git(代码“我们可以重复使用”+ 外部模块)

现在我们使可重用的代码基本上是我们添加了一些新文件,删除了一些旧文件并在 xyz.git 中进行了修改。此代码最初来自 abc.git 中的“我们要重写”的代码。

到目前为止一切顺利,我希望 :)

现在我们有两个选择

  1. 创建一个新的仓库,比如 project.git,添加一个新的远程仓库,即 xyz.git,然后 merge 并从 abc.git 中挑选我们需要的文件。所以就命令而言如下

    • 整个 github 新 repo 创建过程并添加一个 README 文件。 (这是我的 project.git 来源)
    • git 远程添加 xyz git@github.com:xyz.git
    • git checkout -b xyz
    • git pull xyz master
    • git 状态
    • git checkout 大师
    • git merge xyz
    • git commit -a
    • git push origin master

现在我们已经用 xyz.git + README 填充了 project.git 并开始从 abc.git 中挑选文件的艰苦工作(我想避免,我也错过了所有旧历史)

  1. 我认为我可以做的是从 abc.git 中删除所有文件并恢复 xyz.git。在代码方面按以下方式。

    • git rm -r *(这是我的 abc.git 来源)
    • git commit -m
    • git push origin master(现在abc.git没有文件但是有.gitmodules和.git)

    • git 远程添加 xyz git@github.com:xyz.git

    • git checkout -b xyz
    • git pull xyz master

这是冲突开始的地方..有两种类型的冲突(外部模块,因为一些通用的外部模块和一些文件)。

我考虑过第三种选择,即只执行 git log -l 并将其转储到文本文件并使用一些查看器来获取历史记录。

坦率地说,我只是想尽可能地保存历史, cherry-pick 很无聊,但它是可行的。另一个问题是,如果需要删除 repo,如何保存 repo 日志?我想让一个已失效的 repo 保持活力的唯一原因是为了历史和变化。

谢谢。

最佳答案

您的编辑使它变得更好,但仍然很难知道您到底想做什么。例如:如果 xyz 是对 abc 的有效(功能齐全)进化,我仍然不清楚为什么要挑选。

如果您想要 merge 两个存储库以便不丢失任何历史记录,那么......就去做吧。你可以有两个独立的分支机构住在那里,而不会踩在对方的脚上。例如(取这两个是因为它们位于 github 的 repo 页面之上):

$ git clone git://github.com/rails/rails.git monster
$ cd monster
$ git fetch git://github.com/madrobby/scriptaculous.git master:old
$ git branch
    * master
      old
$ ls
    [ looks like rails ]
$ git checkout old
$ ls
    [ looks like scriptaculous ]
$ git checkout master
    [ looks like rails again ]

如果你想要的是 merge 历史基线,即让 xyz 成为 abc 的后代,它在 git filter-branch 手册页(搜索 --parent-filter ),你只想使用你的 abc “旧”分支作为移植点。

说到嫁接点,貌似可以直接用来做这个,不过我对这个概念比较陌生。看看this discussion了解更多详情。

关于git - 当我想从 git repo 中删除所有文件然后添加新文件时如何避免冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394159/

相关文章:

git - 导入错误:没有名为 sslscan 的模块

git - 尽管 gitignore 应该忽略文件,但文件存在冲突

git - 哪个用户在 Windows 机器上执行接收后 Hook ?

git - 如何从已删除的未 merge 分支中删除提交?

git - 使用ssh克隆Git仓库

git - 如何使用浅表克隆获取正确的git rev-list计数?

git - Visual Studio : View full git commit history (including renames)

gitignore 仅在根目录中的文件类型

git - 使用适用于 Windows 的 Git 凭据管理器保存 GIT 凭据 - 不工作

linux - 在大量 diff 文件上从 vimdiff 中断