我曾经一直使用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'.
答案 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审核将看到的提交消息