我使用git init创建了一个新的repo,然后进行了三次提交。现在我想返回并修改我的第一次提交,但如果我做git rebase - I HEAD~3,它显示错误-致命:无效上游'HEAD~3'!
如果我尝试同样的HEAD~2,那么它有点工作,但只让我重新安排最后两次提交。
我如何引用“在有任何提交之前提交”或返回并插入一个空提交?
ERROR with git rebase -i HEAD~3:
fatal: invalid upstream 'HEAD~3'
我使用git init创建了一个新的repo,然后进行了三次提交。现在我想返回并修改我的第一次提交,但如果我做git rebase - I HEAD~3,它显示错误-致命:无效上游'HEAD~3'!
如果我尝试同样的HEAD~2,那么它有点工作,但只让我重新安排最后两次提交。
我如何引用“在有任何提交之前提交”或返回并插入一个空提交?
ERROR with git rebase -i HEAD~3:
fatal: invalid upstream 'HEAD~3'
当前回答
简单的方法是,用一个最新的Git(这个已经出现很长时间了,所以你应该有这个):
git rebase -i --root
另一种简单的方法,正如twalberg在一个评论中指出的那样,使用git checkout—orphan来建立一个新的根提交,你可以在上面复制旧的提交。(这就是rebase -i——root最终在内部所做的事情。)对于某些目的,例如分离初始提交,初始空白提交是有帮助的。
来自未来(2022年)的旁注:让第一次提交只包含一些模板文件(如README)通常是一个好主意。任何新的空存储库中的第一次提交总是有点特殊。注意,如果你使用像Bitbucket, GitHub和GitLab这样的托管网站,当你在那里创建一个存储库时,他们通常会为你做这样一个初始提交,这样你就可以克隆这样创建的存储库,并有一个起点。
其他回答
简单的方法是,用一个最新的Git(这个已经出现很长时间了,所以你应该有这个):
git rebase -i --root
另一种简单的方法,正如twalberg在一个评论中指出的那样,使用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~。