如何将特定提交之上的所有提交移动到Git中的新存储库?
我目前正在从事一个项目,我正在使用Git进行版本控制 该项目与其他几个项目位于存储库中。每个项目都有自己的目录 虽然除当前项目外的所有项目都非常小,它们可以保存在一个存储库中,但我想将当前项目移动到它自己的Git存储库中 我现在的问题是,如何将特定提交顶部的所有提交移动到新存储库如何将特定提交之上的所有提交移动到Git中的新存储库?,git,github,Git,Github,我目前正在从事一个项目,我正在使用Git进行版本控制 该项目与其他几个项目位于存储库中。每个项目都有自己的目录 虽然除当前项目外的所有项目都非常小,它们可以保存在一个存储库中,但我想将当前项目移动到它自己的Git存储库中 我现在的问题是,如何将特定提交顶部的所有提交移动到新存储库 如果有人能告诉我如何实现这一点,我将非常高兴。您可以克隆项目并指定选项。要限制您进行的提交的数量,只需删除其他项目就可以了 这并不是您想要的解决方案,您只需计算要执行的提交数量,并将其设置为克隆的深度。免责声明这可能不
如果有人能告诉我如何实现这一点,我将非常高兴。您可以克隆项目并指定选项。要限制您进行的提交的数量,只需删除其他项目就可以了
这并不是您想要的解决方案,您只需计算要执行的提交数量,并将其设置为克隆的深度。免责声明这可能不是最干净的解决方案,但它可以执行“将多个提交从repo A移动到repo B”的任何要求 这可以通过生成和应用一组补丁来实现
# in repo A
git format patch <sha1 of commit to count from>
# this will produce a bunch of XXXX-<Commit comment>.patch files
# move those files in newly created repo B
cd <path to repo b>
cp <path to repo a>/*.patch .
git am *.patch # replay patches on top of fresh repo
回购A中的#
git格式修补程序
#这将产生一组XXXX-.patch文件
#在新创建的repo B中移动这些文件
光盘
cp/*.patch。
git am*.patch#在新回购协议上重播补丁
更新
找到了一个更好的解决方案-这可能正是您所需要的。首先,我们将创建一个变量,它是一个目录文件的所有提交列表,按从最早到最新的顺序排列:
folder=<new project>
sha=$(echo $(for x in $(git log --format=oneline --follow $folder| awk '{print $1;}'); do echo $x; done) | awk '{ for (i=NF; i>1; i--) printf("%s ",$i); print $1; }')
总而言之,我们将删除到旧项目的远程链接。看到您用github标记了这篇文章,我们还将为github设置一个新的
git remote rm $old
git remote add origin <url for the new project you created>
git远程rm$old
git远程添加源
据我所知,您有一个包含多个项目的回购协议,如下所示:
projects/
project1/
project2/
project3/
project4/
您希望将project3
转换为自己的存储库
Github提供了您应该能够使用的说明
git远程设置url源
。首先这样做很重要,以避免意外推到旧回购project3/
中的所有文件现在都应该位于根目录中project3/
<代码>吉特rm项目3origin
是否使用git remote-v
指向新存储库,并且新存储库是否为空
project3
中的所有文件现在都应该位于目录的顶部。其余的项目将以旧回购协议的形式安全撤离。如果运行git log
,您仍然会看到所有涉及这些文件的提交。这就好像project3
始终是存储库中的唯一内容。您能否澄清如何将特定提交顶部的所有提交移动到新存储库?
这是否意味着您希望在新的repo中有一组连续的提交?或者这是否意味着您希望文件夹中的所有提交都处于新的重新发布中?Github提供了相关说明。我认为所有其他答案也将为我的问题提供解决方案,但根据我的意见,这是最容易理解和最干净的解决方案。
git remote rm $old
git remote add origin <url for the new project you created>
projects/
project1/
project2/
project3/
project4/