`git rebase -i HEAD~N` 和 `git reset --soft HEAD~N` 之间有什么区别?

alp*_*per 6 git git-rebase git-reset git-squash

我们可以压缩 中的最后 N 次提交Git。据我了解,我们可以使用git rebase -i HEAD~Nor压缩最后 N 次提交git reset --soft HEAD~N

在这个问题的答案中(使用 Git 将我的最后 X 次提交压在一起)最受好评的答案建议是使用git reset --soft HEAD~N,但这不是被接受的建议。接受答案建议git rebase -i HEAD~N。因此我很困惑,更喜欢使用哪一个。

这些方法有何不同?推荐使用哪一种或安全使用哪一种?

Tim*_*sen 2

您给出的两个命令都可以用于重写分支的历史记录。软重置选项:

git reset --soft HEAD~N
Run Code Online (Sandbox Code Playgroud)

会将分支的 HEAD 指针向后移动 N 个提交,同时将这些提交中的工作放入阶段。如果您要从此时开始提交,则会将这些提交压缩为一个新的提交。

变基选项:

git rebase -i HEAD~N
Run Code Online (Sandbox Code Playgroud)

将弹出一个窗口,显示之前的 N 次提交。在每一行上,对于每个提交,您可以选择选择(保留)、压缩、重写等。通过选择相关提交,您可以获得与上述软重置选项相同的结果。squash然而,交互式 rebase 比这强大得多。

使用哪种方法取决于操作的复杂程度。我们可能会将软重置视为交互式变基的穷人版本,后者的任务很重。