我想在项目的第一次提交中更改某些内容,而不会丢失所有后续提交。有没有办法做到这一点?
我不小心在源代码的评论中列出了我的原始电子邮件,我想更改它,因为我收到了来自索引 GitHub 的机器人的垃圾邮件。
正如下面ecdpalma所提到的,git1.7.12+(2012 年 8月)增强了以下选项:--root``gitrebase
--root``gitrebase
” git rebase [-i] --root $tip” 现在可以用来重写所有导致 ” $tip” 到根提交的历史。
git rebase [-i] --root $tip
$tip
最初在这里讨论了这种新行为:
我个人认为git rebase -i --root应该让“”在不需要“ --onto”的情况下直接工作,让你“编辑”甚至是历史上的第一个。 没有人打扰是可以理解的,因为人们在历史开始时重写的频率要低得多。
git rebase -i --root
--onto
补丁紧随其后。
(原始答案,2010 年 2 月)
正如GitFAQ(和这个SO question)中提到的那样,这个想法是:
git reset --hard
git rebase --onto <tmp branch> <commit after changed> <branch>`
诀窍是确保您要删除的信息不会被文件中其他地方的稍后提交重新引入。如果您怀疑,那么您必须使用filter-branch --tree- filter以确保该文件的内容不包含在任何提交中的敏感信息。
filter-branch --tree- filter
在这两种情况下,您最终都会重写每个提交的 SHA1,因此如果您已经发布了要修改其内容的分支,请小心。你可能不应该这样做,除非你的项目还没有公开并且其他人还没有基于你将要重写的提交的工作。