Git 使用autosquash重新基调不会';I don’我没有按预期工作

Git 使用autosquash重新基调不会';I don’我没有按预期工作,git,rebase,Git,Rebase,我试图使用git rebase提供的autosquash选项压缩最后3次提交。我有以下历史: * commit 78a7e4844fa32d2ef1bb7bd9b44c4a1b9551d31a (HEAD, new) | Author: maxim koretskyi <mkoretskyi@company.com> | Date: Fri Feb 20 10:29:48 2015 +0200 | | squash! s3 | * commit f25491cadc646

我试图使用git rebase提供的
autosquash
选项压缩最后3次提交。我有以下历史:

* commit 78a7e4844fa32d2ef1bb7bd9b44c4a1b9551d31a (HEAD, new)
| Author: maxim koretskyi <mkoretskyi@company.com>
| Date:   Fri Feb 20 10:29:48 2015 +0200
|
|     squash! s3
|
* commit f25491cadc646baf14bd7e951245c6777230a1d7
| Author: maxim koretskyi <mkoretskyi@company.com>
| Date:   Fri Feb 20 10:29:42 2015 +0200
|
|     squash! s2
|
* commit b988237356ffb59752e49049d083c558373f9486
| Author: maxim koretskyi <mkoretskyi@company.com>
| Date:   Fri Feb 20 10:29:24 2015 +0200
|
|     squash! s1
|
* commit abbcdc833e5eaabe79681bd82087b4d7969e8599 (new1, ne, 9484)
| Author: maxim koretskyi <mkoretskyi@company.com>
| Date:   Wed Feb 18 18:21:58 2015 +0200
|
|     3
因此git会打开一个包含以下内容的文本编辑器:

pick b988237 squash! s1
pick f25491c squash! s2
pick 78a7e48 squash! s3
但我希望是这样的:

pick b988237 squash! s1
squash f25491c squash! s2
squash 78a7e48 squash! s3

我做错了什么?

来自文档,但强调我的:

当提交日志消息以“squash!”(或“fixup! “…”,并且有一个提交,其标题以相同的…开头, 自动修改
rebase-i
的todo列表,以便提交 标记为挤压的事件发生在要修改的提交之后, 并将移动提交的操作从拾取更改为挤压(或 修正)。忽略第一次之后的后续“修复”或“挤压”, 如果您使用git commit--fixup/--squash引用了早期的fixup/squash

你的第一个
壁球
s3
作为其
部分。因此,rebase寻找一个提交,它的“标题”是
s3
(文档中从未定义过这个标题,但它似乎表示“一行描述”,即日志消息的第一行)。列表中没有此类提交

继续讨论第二个问题,我们发现同样的问题,第三个问题也是如此

如果您的第一次提交(标题为
s1
)之后是一次提交,其标题为
squash!s1
,那个特定的人会得到一个“挤压”字

(请注意,
git commit--fixup=
git commit--squash=
将为您创建这种“相同标题”的提交。“忽略后续”内容是因为您可以在工作时这样做:

git add ...; git commit -m thing1
... edit ...
git add ...; git commit -m thing2
# now fix thing1 bug noticed while working on thing2
... edit ...
git add ...; git commit --no-edit --fixup=HEAD^
... edit/test some more, discover fixup was not complete
git add ...; git commit --no-edit --fixup=HEAD

在本例中,第二行fixup是
fixup!fixup!thing1
;rebase只是查找“title”是
thing1
的提交。)

非常感谢!在学习Git:)的过程中,您对我帮助很大。我试过用同样的信息,它成功了。有趣的是,在我对
abbcd
之后的提交重新设置基址后,
squash
不起作用。知道为什么吗?这里还提到了带有explanation的
rebase.autosquash
选项:
如果设置为true,则默认启用--autosquash选项。
。这是否意味着,如果此选项为
true
,我不需要使用
git-rebase
指定
--autosquash
,git将使用
挤压自动查找提交?为了匹配主题并自动取消主题,单行文本必须位于
rebase-i
将要执行的命令集中。可以这样想:
rebase-i
首先生成一个完整的列表,其中只包含
pick
命令。然后,如果启用autosquash,则rebase脚本将查找具有
挤压的行
修复就在提交ID部分之后。它接受这些线并将其视为“修改另一拾取线的说明”。如果没有要修改的拾取行,则只保留指令;如果有要修改的拾取行,则按照说明进行操作。是的,
rebase.autosquash=true
表示自动完成
--autosquash
rebase
有一个
--no autosquash
选项,可以手动关闭一个rebase,如果需要,当然也可以更改配置选项).确保在执行
重基--autostash时使用Git 2.20+(2018年第4季度):
git add ...; git commit -m thing1
... edit ...
git add ...; git commit -m thing2
# now fix thing1 bug noticed while working on thing2
... edit ...
git add ...; git commit --no-edit --fixup=HEAD^
... edit/test some more, discover fixup was not complete
git add ...; git commit --no-edit --fixup=HEAD