例如,如果我们想将提交压缩HEAD
到 commit HEAD~4
,我们有一个选项,我们可以通过
- 将提交重置
HEAD
为HEAD~3
- 构建一个与我们的旧 HEAD 具有相同更改的临时提交(例如,
temp
) - 隐藏其他分阶段/非分阶段的更改
temp
与我们的旧人挤在一起HEAD~4
- 弹出我们隐藏的更改
- 再次构建提交作为较旧的提交(
HEAD~3
到HEAD
)。
还有其他更快更方便的方法吗?
例如,如果我们想将提交压缩HEAD
到 commit HEAD~4
,我们有一个选项,我们可以通过
HEAD
为HEAD~3
temp
)temp
与我们的旧人挤在一起HEAD~4
HEAD~3
到HEAD
)。还有其他更快更方便的方法吗?
所以正如@jthill 所建议的,git 存在一个autosquash
选项。
例如,在我的情况下,让最初的情况是,
$ git log --oneline --decorate
ddd4444 (HEAD, my-feature-branch) A fourth commit
ccc3333 A third commit
bbb2222 A second commit
aaa1111 A first commit
9999999 (master) Old stuff on master
我现在将添加我想要压缩的最近更改HEAD~4
:
$ git add .
$ git commit --fixup aaa1111
[my-feature-branch eee5555] fixup! A first commit
所以,我的历史现在看起来像:
$ git log --oneline --decorate
eee5555 (HEAD, my-feature-branch) fixup! A first commit
ddd4444 A fourth commit
ccc3333 A third commit
bbb2222 A second commit
aaa1111 A first commit
9999999 (master) Old stuff on master
现在变基使用autosquash
by会在正确的位置$ git rebase --interactive --autosquash master
自动选择提交。--fixup
在 rebase 并与 commit-message 编辑合并之后,您将成功地 rebase !
像魔术一样工作!:)
来源:思想机器人