如何将一组更改从一个git复制程序移动到另一个git复制程序——复制程序不是';t克隆
这里有一个有趣的问题。。。我的机器上有两个git程序。它们都是从另一个源代码管理系统迁移过来的,而第一个源代码管理系统并没有像它应该的那样进行转换。第二个更好用 我在第一个复制中做了一系列的更改,我想转移到另一个复制。虽然两个复制之间的代码本质上是相同的,但它们是彼此独立创建的,因此具有不同的历史。(代码更改是相同的,但更改编号和其他元数据完全不同)如何将代码移动到新的git Repo如何将一组更改从一个git复制程序移动到另一个git复制程序——复制程序不是';t克隆,git,Git,这里有一个有趣的问题。。。我的机器上有两个git程序。它们都是从另一个源代码管理系统迁移过来的,而第一个源代码管理系统并没有像它应该的那样进行转换。第二个更好用 我在第一个复制中做了一系列的更改,我想转移到另一个复制。虽然两个复制之间的代码本质上是相同的,但它们是彼此独立创建的,因此具有不同的历史。(代码更改是相同的,但更改编号和其他元数据完全不同)如何将代码移动到新的git Repo 编辑:我真的不能只是“复制”我的文件,因为这两个复制卡在不同的时间点。“我的代码被破坏”的复制永远停留在过去。
编辑:我真的不能只是“复制”我的文件,因为这两个复制卡在不同的时间点。“我的代码被破坏”的复制永远停留在过去。您可以执行历史移植,以便将历史从“旧”存储库移动到新存储库 假设您希望从存储库X中的分支
foo
获取更改,并将其应用于存储库Y中的主节点。首先,让我们将X作为远程对象添加到Y,以便我们可以操作这两个历史记录:
git remote add tmp-X ~/repository-X
git fetch tmp-X
既然这两个历史记录都在一个存储库中,我们就可以选择进行所需的更改。让我们假设历史在master
中是这样的:
commit 0d39ac6df9f5d6e7b50d670d705fa4aae049b70d
Author: Joe User <user@example.com>
Date: Sat Oct 13 03:55:24 2012 -0400
Common parent commit
commit be79703c19475118b72655d1ea5d1957f3edea58
Author: Joe User <user@example.com>
Date: Sat Oct 13 03:57:29 2012 -0400
Another change I want to keep
commit 2a1e95c6cb458718448581664d9f8e6a0b260968
Author: Joe User <user@example.com>
Date: Sat Oct 13 03:56:00 2012 -0400
Change I want to keep
commit 0fdda21de3382acb005e9511e6ce95007f20e687
Author: Joe User <user@example.com>
Date: Sat Oct 13 03:55:24 2012 -0400
Common parent commit
[some kind of junk in the commit message that changes the IDs]
我们可以git checkout master
,然后:
git cherry-pick 0fdda21..tmp-X
现在master
看起来像:
commit b2246afa547ee52028331d2aa59400bca1265581
Author: Joe User <user@example.com>
Date: Sat Oct 13 03:57:29 2012 -0400
Another change I want to keep
commit da36f4b6728aecfd3da7c63d9b1bd430c864858b
Author: Joe User <user@example.com>
Date: Sat Oct 13 03:56:00 2012 -0400
Change I want to keep
commit 0d39ac6df9f5d6e7b50d670d705fa4aae049b70d
Author: Joe User <user@example.com>
Date: Sat Oct 13 03:55:24 2012 -0400
Common parent commit
提交b2246afa547ee52028331d2aa59400bca1265581
作者:Joe User
日期:星期六2012年10月13日03:57:29-0400
另一个我想保留的变化
提交da36f4b6728aecfd3da7c63d9b1bd430c864858b
作者:Joe User
日期:2012年10月13日星期六03:56:00-0400
我想要的零钱
提交0d39ac6df9f5d6e7b50d670d705fa4aae049b70d
作者:Joe User
日期:星期六2012年10月13日03:55:24-0400
公共父提交
如果您在主线中进行了其他更改,您可能会发现从
mainline
中与基本提交(0fdda21
以上)相对应的历史提交分支,然后选择此分支,然后将此临时分支合并到主线中也很有帮助。您尝试过吗?不可否认,这不是一个完美的解决方案。我建议使用git rebase BASE_COMMIT——在NEW_BASE_COMMIT上,而不是git cherry pick“range”。rebase将允许您在冲突发生时修复冲突,您可以使用git rebase--interactive进行一些额外的清理(如果需要),一旦我运行前两个OMMAND来添加远程并获取更改,那么我可以从良好的复制中清除所有这些垃圾吗?否则,我现在有两个复制品充满了垃圾。(每个都增长到20gb以上)@Jessewigert,git remote rm tmp-X;git gc——aggressive
@Jessewigert,还请注意,如果两个存储库之间的文件内容基本相同,则获取可能不会导致其增长太多。。。到目前为止,我的repro在修订(但不是代码更改)方面存在分歧,因此这些命令都不会产生任何可感知的输出。我现在要继续我那坏掉的复印机。一旦我完成了当前的特性,我就可以把整个东西扔进“官方”源代码控制系统。谢谢大家的帮助。