我们可以将最新的提交压缩到特定的先前提交吗?

时间:2016-06-09 16:08:25

标签: git version-control squash git-squash

例如,如果我们想将HEAD的提交压缩到提交HEAD~4,我们可以选择

  1. 将提交从HEAD重置为HEAD~3
  2. 使用与旧HEAD(例如temp
  3. 相同的更改构建临时提交
  4. 存储其他暂存/未暂停的更改
  5. 使用旧的temp
  6. 压缩HEAD~4
  7. 弹出我们藏匿的变化
  8. 再次提交提交作为旧提交(HEAD~3HEAD)。
  9. 有没有其他更快捷方便的方法呢?

1 个答案:

答案 0 :(得分:1)

正如@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使用$ git rebase --interactive --autosquash master进行变基,可以在正确的位置自动选择--fixup次提交的提交。

在rebase并与commit-message编辑合并之后,您将成功重新设置提交!

就像魔术一样! :)

来源:thoughtbot