我如何重新基准第一次提交?

我使用git init创建了一个新的repo,然后进行了三次提交。现在我想返回并修改我的第一次提交,但如果我执行git rebase -i HEAD~3,它会显示错误- fatal: invalid upstream 'HEAD~3'!

如果我对HEAD~2尝试同样的方法,那么它有点工作,但只让我重新安排最后两次提交。

我如何引用“在有任何提交之前提交”或返回并插入一个空提交?


git rebase -i HEAD~3错误:

fatal: invalid upstream 'HEAD~3'
83333 次浏览

简单的方法是,用一个最新的Git(这个已经出现很长时间了,所以你应该有这个):

git rebase -i --root

另一种简单的方法,正如twalberg在一个已经删除但现在在https://stackoverflow.com/a/68279810/1256452的回答中扩展的注释中指出的那样,是使用git checkout --orphan来建立一个新的根提交,你可以在上面复制旧的提交。(这就是rebase -i --root最终在内部所做的事情。)对于某些目的,例如分离初始提交,初始空白提交是有帮助的。

来自未来(2022)的旁注:让第一次提交只包含一些样板文件(如README)通常是一个好主意。任何新的空存储库中的第一次提交总是有点特殊。注意,如果你使用像Bitbucket, GitHub和GitLab这样的托管网站,当你在那里创建一个存储库时,他们通常会做这样一个初始提交,这样你就可以克隆这样创建的存储库,并有一个起点。

如果你想对已经提交的文件进行更改,编辑作者/消息等,torek的回答是很好的。但是如果你想要分割提交或类似的事情,那么你很可能会遇到麻烦,因为你不能从最初的提交中执行git reset HEAD~

为了实现这一点,你可以像这样插入一个空的初始提交:

git checkout --orphan empty-initial-commit
git rm -r --cached .
git clean -d -f
git commit --allow-empty -m 'Empty initial commit'
git checkout <branch>
git rebase empty-initial-commit
git branch -d empty-initial-commit

然后你可以执行git rebase -i,编辑提交(第一个非空提交),并像平常一样执行git reset HEAD~