如何删除分支为master
的提交?
我已经通过Git subtree将一个大型库以及一个非常丰富的提交历史记录(并且在我的代码之前)添加到子目录中。我想追溯整个历史记录,但仍然可以在新提交中合并到库。
我尝试了git rebase
的各种组合,但我从未得到预期的结果[*]。
我的存储库看起来像:
A---B-----------F---G master
/
... C---D---E
我希望它看起来像:
A---B-----------F'--G' master
/
E'
或:
A---B-------E'--F'--G' master
[*]:
git rebase --onto C E master
git checkout F; git rebase --onto C E master
答案 0 :(得分:1)
这是历史编辑。你最终会得到像
这样的东西A---B-----------F'---G' master
/
E'
此后合并将成为一个问题,因为Git将无法在您的历史和图书馆历史之间找到共同的父母。
实际上你需要
--no-commit
合作。历史记录看起来像
A---B-----------F'---G'
要制作库的浅层克隆,您需要执行以下操作(警告:未经测试):
git format-patch F --stdout > ~/saved_commits.patch
)git remote rm
git reflog expire --expire=now --all
git gc --prune=now
。现在你应该看到存储库缩小了。git fetch --depth=10 libraryremote
git am ~/saved_commits.patch
)。要迁移到子模块解决方案(可能是最佳选项),您需要回滚到合并之前的状态并设置子模块,然后用更改的commit-id替换每个合并用于子模块。与case of splitting out project directory to submodule不同,我不知道自动解决方案(但它可以以类似的方式实现)。