Git:从提交中创建一个新分支,删除其他所有内容

时间:2014-07-21 08:33:13

标签: git git-branch

我到底应该做什么才能

  • 从某个提交创建一个新分支(git checkout -b new_one; git cherry-pick commit_id,我是对的吗?)
  • 删除其他所有内容
  • 将分支new_one重命名为master

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

感谢。

3 个答案:

答案 0 :(得分:2)

为了获得一个只持有一个提交的新主服务器,最简单的方法是创建一个新的repo,然后将当前状态master作为初始状态放入其中。否则,您将始终拥有master目前的历史记录:

  1. 导出主人的当前状态(参见https://stackoverflow.com/a/163769/520162
    git archive --format zip --output /full/path/to/zipfile.zip master
  2. 将创建的zip文件解压缩到新的仓库所在的位置
  3. 在该目录中初始化一个新的仓库:
    git init .
  4. 创建初始提交:
    git add . && git commit -m "initial"
  5. 分配您的remote
    git remote add ...
  6. master的新状态推送到那里:
    git push -f origin master:master
  7. 然后,您的repo将只有一个分支(master)只有一个提交。

答案 1 :(得分: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_branch重命名为master

git branch -m new_branch master

请注意,这并不一定会删除所有历史记录 - 即使您执行完整的垃圾回收,commit_id所引用的任何对象都将保留在git历史记录中(以及git对象存储库)。

答案 2 :(得分: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

......然后强制推送