从现有的本地分支创建一个新的git存储库

时间:2011-11-27 17:29:23

标签: git branch

我有一个包含两个分支的Git存储库:masterredesignredesign分支是从master创建的,master从那时起就没有被触及过:

master
...|--m50--\
            \--m51--|--m52--|--m53-- redesign

redesign分支发展得如此之多以至于我想从中创建一个新的整个存储库,将redesign的第一次提交作为新存储库的初始提交并忘记以前的历史记录继承自master

master
...|--m50--

redesign
--r1--|--r2--|--r3--

这可以用Git吗?这有related question,但其目标是使用目录,而不是分支。

谢谢!

3 个答案:

答案 0 :(得分:7)

你可以:

  • 签出您想要的新回购“root”的提交
  • 将所有文件复制到新目录(.git目录除外)
  • 查看您的redesign分支
  • git format-patch master..redesign
  • 将所有生成的补丁文件移动到方便的地方

然后转到新目录并:

$ git init
$ git add .           # make sure your .gitignore is in place though
$ git commit -m"..."
$ git am /path/to/patches/*.patch

答案 1 :(得分:1)

首先,复制或克隆您的git存储库。

然后,找出新根提交的哈希值(图中的m51)。将其提交哈希放入文件.git/info/grafts,然后运行git filter-branch --all。验证成功操作后,可以删除original/*备份引用(或重新克隆存储库)。

请注意,这将为所有提交创建新的提交哈希值,因此您必须小心已发布的历史记录。

答案 2 :(得分:0)

创建新的存储库,然后:

$ git add remote newrepo <path to newrepo>
$ git checkout redesign
$ git checkout --orphan clean
# The branch is empty, but the files from the original branch are staged for commit.
$ git commit -m"clean"
$ git push newrepo clean:master

注意:如果您想保留历史记录(或不关心),请省略“干净”

的创建