我们可以将最新的提交压缩到特定的先前提交吗?
can we squash the latest commit to a specific previous commit?
例如,如果我们想将 HEAD
处的提交压缩为提交 HEAD~4
,我们有一个选项可以通过
来完成
- 将提交从
HEAD
重置为 HEAD~3
- 构建一个临时提交,更改与我们的旧 HEAD 相同(比如,
temp
)
- 隐藏其他 staged/unstaged 更改
- 用我们的旧
HEAD~4
压缩 temp
- 弹出我们隐藏的零钱
- 构建再次提交作为旧提交(
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
现在 $ git rebase --interactive --autosquash master
使用 autosquash
进行变基会自动选择提交,并在正确的位置提交 --fixup
。
在 rebase 并与提交消息编辑合并之后,您将成功完成提交 rebase!
就像变魔术一样! :)
来源:thoughtbot
例如,如果我们想将 HEAD
处的提交压缩为提交 HEAD~4
,我们有一个选项可以通过
- 将提交从
HEAD
重置为HEAD~3
- 构建一个临时提交,更改与我们的旧 HEAD 相同(比如,
temp
) - 隐藏其他 staged/unstaged 更改
- 用我们的旧
HEAD~4
压缩 - 弹出我们隐藏的零钱
- 构建再次提交作为旧提交(
HEAD~3
到HEAD
)。
temp
还有其他更快更方便的方法吗?
所以正如@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
现在 $ git rebase --interactive --autosquash master
使用 autosquash
进行变基会自动选择提交,并在正确的位置提交 --fixup
。
在 rebase 并与提交消息编辑合并之后,您将成功完成提交 rebase!
就像变魔术一样! :)
来源:thoughtbot