非交互式修正,直到指定哈希

时间:2014-06-27 03:04:33

标签: git squash fixup

假设我有小时提交

* 7bd4815 (HEAD) four
* afe9410 third
* db064dd second
* 46ab932 first

没有未提交的更改。我想做的是非交互式地将first之后的所有东西压入其中。我想要相当于

pick 46ab932 first
fixup db064dd second
fixup afe9410 third
fixup 7bd4815 four

这里我以四个提交为例,但实际的提交数量会有所不同。不过,我会知道提交的哈希值,所以这就是我想要使用的内容。

搜索到这一点毫无结果(我可能没有找到正确的术语),因为我找到了很多解决方案,但从未遇到过这种情况。

1 个答案:

答案 0 :(得分:2)

此解决方案类似于我对Combine or rebase an arbitrarily large number of commits的解决方案。你基本上想要使用软重置来实现与squash / fixup相同的效果,然后是提交。

对于以下解决方案,我将使用术语“first”表示第一次提交的提交sha(如原始海报的示例中所示),而“4th”表示最后一次提交sha,即HEAD中的提交是

解决方案1:软重置,修改

git reset --soft first
git commit --amend --no-edit

# Verify results
git diff fourth

解决方案2:无需修改的软复位

这要求您重置为第一次提交的父级,以避免必须修改:

git reset --soft first^
git commit -C first

# Verify results
git diff fourth

-C的{​​{1}}选项重用git commit的提交消息。

文档