文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Discard History 丢弃
交互式变基操作当然能够完成这样的任务,但是如果历史版本库有成百上千个,将这些操作的 pick 都改成 fixup 是很费事的。git 有更简单的方式完成该操作。
如果想要把 A 之前的历史提交全部清除。
基于 A 对应的提交构建一个跟提交,然后在将 master 分支在里程碑 A 之后的提交变基的新的根提交上,实现对历史提交的清除。
A 对应的提交的构造出一个根提交至少有两种方法,
方法一: git commit-tree
查看里程碑 A 指向的目录树 用 A^{tree} 语法访问里程碑 A 对应的目录树。
$ git cat-file -p A^{tree}
使用 git commit-tree 可以直接从该目录树创建提交
$ echo "Commit from tree of tag A." | git commit-tree A^{tree}
该指令输出一个提交的 SHA1 哈希值。
查看该提交,会发现这个提交没有历史提交。
$ git log --pretty=raw 提交 ID
方法二:git hash-object
查看里程碑 A 指向的提交。用 A^0 语法访问里程碑 A 对应的提交
$ git cat-file commit A^0
将上面的输出(里程碑 A 指向的提交)过路掉以 parent 开头的行,并将结果保存到一个文件中。
$ git cat-file commit A^0 | sed -e '/^parent/ d' > tmpfile
执行 git hash-object 命令,将文件 tmp 作为一个 commit commit 对象写入对象库。
$ git hash-object -t commit -b -- tmpfile
上面的结果就是 至此那个提交的对象 ID. 可以查看以验证该提交确实没有父提交。
$ git log --pretty=raw 提交 ID
无论哪种方法创建了新的根提交,都可以使用变基操作,将 master 分支在里程碑 A 之后的提交变基到新的根提交上。
执行变基,将 master 分支里程碑 A 之后的提交全部迁移到新的根提交之上
$ git rebase --onto <根提交 ID> A master
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论