注意:我知道这是重写历史记录,会改变所有哈希值,并使其他人变得混乱。
我想接受提交,并删除其父级。具体来说,提交现在应该看起来像初始提交。这意味着它的差异会改变;它看起来好像所有文件都是由该提交创建的,在历史的那一点上。
如何做到这一点? (当然,我可以编辑提交对象,但是提交不会相互指向。)另外,我想在一个新的分支上执行此操作(意味着现在有两个历史记录:原始的,另一个是提交是初始提交的。)
答案 0 :(得分:2)
git rebase -i HEAD~
然后在上面的终端cmd之后弹出的编辑器中将子提交行的开始从pick更改为squash。或者分别是'p'和's'。编写文件并退出上述命令中出现的编辑器
编辑:假设两次提交是最新的。如果没有那么你可以查看孩子的子提交哈希并使用git rebase -i HEAD~2而不是
Edit2:或者你可以git rebase -i parentcommithash,列表的顶部应该是父
答案 1 :(得分:2)
git checkout -b newbranch
git rev-parse @ >.git/info/grafts # any equivalent for @ will work e.g. HEAD or newbranch
git filter-branch
rm .git/info/grafts
(编辑:添加了rm
。如果没有这个,这个仓库仍将反映原始提交的嫁接祖先)
答案 2 :(得分:0)
假设您希望新的初始提交为123456
。
git checkout -b new_master
git filter-branch --commit-filter '
if git merge-base --is-ancestor 123456 $GIT_COMMIT ;
then
git commit-tree "$@";
else
skip_commit "$@";
fi' HEAD
Todo(任何人):在解释中编辑