致命错误:需要一个单一的修订版本。

3
我的代码库有3个提交。我想将它们压缩为一个。
我运行了git rebase -i HEAD~3,但是出现了以下错误:
fatal: Needed a single revision
invalid upstream HEAD~3

我能够运行 git rebase -i HEAD~2 然后 git push origin +master,现在我有两个提交记录。

但是为什么我不能运行 git rebase -i HEAD~3


2
在编程中,“~”后面的数字表示你要回退多少步。因此,如果你有3个提交,你只能回退2个提交... - Timothy Truckle
2个回答

2
HEAD~3 是当前提交的曾祖父。但由于只有三个提交,因此没有曾祖父(第一个提交是当前提交的祖先)。
您可以通过使用 git reset 后跟 git commit 来实现所需的结果。
git reset --soft HEAD~2
git commit --amend

git reset --soft 命令将 HEAD 移动到指定的提交,但不会改变工作树和索引。现在,HEAD 指向第一个提交,但工作树和索引(暂存文件)与原来的 HEAD 同步;第一个提交和第三个提交之间的所有更改都已被暂存,等待提交。

git commit --amend 命令更新当前提交(它是运行 git reset --soft HEAD~2 后的第一个提交)。


为什么你把我的命令改成了重置?我不想回去,我想要将我的当前更改压缩在一起。 - red888
你想回去将三个提交引入的更改合并为一个。这是一种方法。还有其他方法(其中之一是你尝试过的,但它不起作用,因为HEAD~3不存在)。 - axiac

0
从 Git 2.30.1 (Q1 2021) 开始,一个 "git rebase"(man) 命令将会给出更明确的错误信息(因为在您的情况下 HEAD~3 不存在):
fatal: no such branch/commit 'HEAD~3'

查看 提交 ca5120c(2021年1月1日)由René Scharfe (rscharfe)提交。
(由Junio C Hamano -- gitster --合并于提交 df26861,2021年1月15日)

rebase:验证提交参数

报告者:LeSeulArtichaut
签署者:René Scharfe

如果用户指定了一个基础提交以切换到,请立即检查它是否引用了一个提交,以避免在后面发现它是无效对象时混淆。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接