Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将一组更改从一个git复制程序移动到另一个git复制程序——复制程序不是';t克隆_Git - Fatal编程技术网

如何将一组更改从一个git复制程序移动到另一个git复制程序——复制程序不是';t克隆

如何将一组更改从一个git复制程序移动到另一个git复制程序——复制程序不是';t克隆,git,Git,这里有一个有趣的问题。。。我的机器上有两个git程序。它们都是从另一个源代码管理系统迁移过来的,而第一个源代码管理系统并没有像它应该的那样进行转换。第二个更好用 我在第一个复制中做了一系列的更改,我想转移到另一个复制。虽然两个复制之间的代码本质上是相同的,但它们是彼此独立创建的,因此具有不同的历史。(代码更改是相同的,但更改编号和其他元数据完全不同)如何将代码移动到新的git Repo 编辑:我真的不能只是“复制”我的文件,因为这两个复制卡在不同的时间点。“我的代码被破坏”的复制永远停留在过去。

这里有一个有趣的问题。。。我的机器上有两个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在修订(但不是代码更改)方面存在分歧,因此这些命令都不会产生任何可感知的输出。我现在要继续我那坏掉的复印机。一旦我完成了当前的特性,我就可以把整个东西扔进“官方”源代码控制系统。谢谢大家的帮助。