2014-07-21 61 views
-1

正是我应该做的,以混帐:从别的提交,删除everythng创建一个新的分支

  • 从某个创建一个新的分支提交(git checkout -b new_one; git cherry-pick commit_id,对吗?)
  • 删除其他一切
  • 重命名分支new_onemaster

当然,任何改变也应该推到远程。

谢谢。

+0

我认为你需要解释你在这里想要达到的目标。你想重新设置一些已知的提交? – Martin

+0

我想获得一个只有一个提交的新的主服务器(这是旧主服务器中的commit_id) –

回答

0

我会尝试这样的事:

git branch tmp <the very first commit in the repo> 
git checkout tmp 
git merge --squash <commit_id> 
git branch -d master 
git branch -m tmp master 

...接着是被迫推

+0

首先,在第一步之后显然需要'git checkout tmp'。其次,这些命令仍然为您提供唯一的提交,这是第一次提交。这不是我所问的(是的,你仍然可以重新添加,提交和推送实际文件,但我认为应该有一个更简单的方法,不是吗?) –

+0

是的,你需要签出tmp。我修正了这一点。合并--squash将合并到tmp,并在tmp上创建一个包含中所有内容的单个提交。 – Martin

1

创建new_branch开始它关闭commit_id

git branch new_branch commit_id 

退房吧:

git checkout new_branch 

删除旧master分支:

git branch -d master # you may need to use -D, with history loss may occur 

重命名new_branchmaster

git branch -m new_branch master 

请注意,这并不能消除所有的历史 - 即使执行完整垃圾回收,这commit_id所指的任何对象将保持在git历史记录(和git对象存储)中。

+0

但这实际上是我的问题的重点:删除历史:)。 –

2

为了获得一个只保存一次提交的新主,最简单的方法是创建一个新的回购,然后将master的当前状态作为初始状态。否则,你会永远拥有master目前的历史:

  1. 出口主的当前状态(见https://stackoverflow.com/a/163769/520162
    git archive --format zip --output /full/path/to/zipfile.zip master
  2. 解压缩创建压缩文件在您的新的回购协议应出席
  3. 在该目录中初始化新的回购协议:
    git init .
  4. 创建您最初的承诺:
    git add . && git commit -m "initial"
  5. 将您的remote
    git remote add ...
  6. master有新状态:
    git push -f origin master:master

那么,你的回购将只有一个分支(master)只有一个提交。