2011-11-27 60 views
6

我有一个Git仓库有两个分支:masterredesign。该redesign分支从master创建的,master还未触碰从那时起:从现有的本地分支创建一个新的git存储库

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

redesign分公司已经发展这么多,我想从它创建一个新的整体存储库,以第一次提交的redesign作为初始提交新的存储库,并从不忘继承master以前的历史:

master 
...|--m50-- 

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

这是可能的Git的?这里有一个related question,但它的目标是使用一个目录,而不是一个分支。

谢谢!

回答

7

,你可以:

  • 结账提交您想为您的新的回购协议的“根”
  • 的所有文件复制到新目录(除了.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 
+0

当执行'git am的创作......出现了几个这样的错误消息:'/Users/elitalon/Sites/exigo/.git/rebase-apply/patch:447:尾随空白'和'错误:cake/console/cake.bat:patch not apply'。会发生什么? – elitalon

+0

使用一个单独的目录,您只存储* git format-patch生成的补丁文件。你想要应用的东西看起来不像你应该应用的任何东西。 – Mat

+0

忘记它。我使用了'--whitespace = fix'这个标志,所有的东西都像魅力一样。谢谢! – elitalon

1

首先,复制或克隆你的Git仓库。

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

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

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 

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

相关问题