git rebase不能'壁球'没有先前的提交

时间:2018-05-25 15:54:17

标签: git

我曾经一直使用git rebase -i,但突然间它停止了工作。

git rebase在我的任何项目中都不起作用,这很奇怪,我怀疑我的git配置有问题(?)

我创建了一个test存储库来展示我正在做的事情。

在测试存储库中,我有2次提交

$ git log

commit 8fb921a9a481ef1040ee670af7894bff6055a5b4 (HEAD -> master, origin/master)
Author: Bu Kinoshita
Date:   Fri May 25 11:26:05 2018 -0300

test 2

commit 00ffa75caccf0118b9e89bc2bb70c4a7417b223a
Author: Bu Kinoshita
Date:   Fri May 25 11:25:39 2018 -0300

test

然后git rebased使用第一次提交的提交哈希

git rebase -i 00ffa75caccf0118b9e89bc2bb70c4a7417b223a

pick 8fb921a test 2

# Rebase 00ffa75..8fb921a onto 00ffa75 (1 command)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

将第一行更改为squash 8fb921a test 2并保存文件。

错误显示

error: cannot 'squash' without a previous commit
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.

2 个答案:

答案 0 :(得分:2)

  

在测试存储库中,我有2次提交

要使用git rebase将第二次提交压缩到第一次提交,您必须重新两次提交。

由于只有两个,git rebase -i单独不起作用。使用git rebase -i --root会。

但是,由于两次提交,并且您要压缩的提交是当前提交,因此您可以在不使用git rebase的情况下执行此操作在所有:

git reset --soft HEAD~1
git commit --amend

这里的缺点是--amend只会出现第一个提交的消息进行编辑;第二个提交的消息将在此时消失。请注意,--amend实际上并未更改现有提交;相反,它会创建一个 new 提交,其父项是当前提交的父项。在这种情况下,当前提交是根提交,因此这使用根提交的父母缺少来进行新的根提交。

答案 1 :(得分:0)

您的挤压方向错误。向上挤压,而不是向下挤压。

Pick ####
Pick ###
Pick ###

然后以这种方式压入一个提交:

Pick ###
Squash ###
Squash ###

这样,之前就有一个提交。如果您需要重命名提交,则可以使用reword而不是pick。但是保存后会出现一个屏幕,您可以编辑PR审核将看到的提交消息