我如何git rebase的第一次提交?

ih99xse1  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(336)

我用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'
cdmah0mi

cdmah0mi1#

简单的方法是,使用一个最近的Git(它已经发布很长时间了,所以你应该有这个):

git rebase -i --root

另一个简单的方法,正如twalberg在一个注解中所指出的,这个注解后来被删除了,但现在在https://stackoverflow.com/a/68279810/1256452's answer中被扩展了,就是使用git checkout --orphan来设置一个新的根提交,你可以在它上面复制旧的提交。(这就是rebase -i --root最终在内部所做的事情。)出于某些目的,比如拆分最初的提交,这个初始空提交是有帮助的。
来自未来(2022年)的旁注:在第一次提交时只包含一些样板文件,比如README,这通常是个好主意。在任何新的、空的仓库中的第一次提交总是有点特殊。注意,如果你使用Bitbucket、GitHub和GitLab等托管网站,当你在那里创建仓库时,他们通常会为你做这样的初始提交。这样您就可以克隆这样创建的存储库,并有一个起点。

oxalkeyp

oxalkeyp2#

torek's answer可以用来修改提交中的文件,编辑作者/消息等。但是如果你想分割提交或类似的操作,那么你很可能会遇到麻烦,因为你不能从初始提交开始执行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~

相关问题