小编典典

用 Git 更改项目的第一次提交?

all

我想在项目的第一次提交中更改某些内容,而不会丢失所有后续提交。有没有办法做到这一点?

我不小心在源代码的评论中列出了我的原始电子邮件,我想更改它,因为我收到了来自索引 GitHub 的机器人的垃圾邮件。


阅读 66

收藏
2022-03-07

共1个答案

小编典典

正如下面ecdpalma所提到的,git1.7.12+(2012
年 8月)增强了以下选项:--root``gitrebase

git rebase [-i] --root $tip” 现在可以用来重写所有导致 ” $tip” 到根提交的历史。

最初在这里讨论了这种新行为:

我个人认为git rebase -i --root应该让“”在不需要“ --onto”的情况下直接工作,让你“编辑”甚至是历史上的第一个。
没有人打扰是可以理解的,因为人们在历史开始时重写的频率要低得多。

补丁紧随其后。


(原始答案,2010 年 2 月)

正如GitFAQ(和这个SO
question
)中提到的那样,这个想法是:

  1. 创建新的临时分支
  2. 将其倒回到您想要更改的提交git reset --hard
  3. 更改该提交(它将是当前 HEAD 的顶部,您可以修改任何文件的内容)
  4. 在更改的提交之上重新设置分支,使用:
    git rebase --onto <tmp branch> <commit after changed> <branch>`
    

诀窍是确保您要删除的信息不会被文件中其他地方的稍后提交重新引入。如果您怀疑,那么您必须使用filter-branch --tree- filter以确保该文件的内容不包含在任何提交中的敏感信息。

在这两种情况下,您最终都会重写每个提交的
SHA1,因此如果您已经发布了要修改其内容的分支,请小心。你可能不应该这样做,除非你的项目还没有公开并且其他人还没有基于你将要重写的提交的工作。

2022-03-07