“git rebase -i HEAD~N”和“git reset --soft HEAD~N”的区别是什么?

5
我们可以在 Git 中压缩最后的 N 次提交。据我了解,我们可以使用 git rebase -i HEAD~Ngit reset --soft HEAD~N 来压缩最后的 N 次提交。
在这个问题的答案中 (Squash my last X commits together using Git),得票最高的答案建议使用 git reset --soft HEAD~N,但并不是被接受的答案。被接受的答案建议使用 git rebase -i HEAD~N。因此,我感到困惑,哪一个更好地被使用。
这两种方法有什么不同?哪一种推荐或安全被使用?

2
rebase命令更加高级和功能更强大,因此需要更多的工作(由计算机完成)。reset-and-commit命令则更简单且功能较弱,因此对计算机来说更容易。如果你只是想要合并所有内容,最终结果是相同的,所以使用任何一种方法都可以,选择认为更容易的方式,或者如果你的计算机非常慢,可以使用reset-and-commit方法,这样只需要几秒钟而不是30分钟。我发现对于很多次提交来说,rebase对我来说也更困难,因为我需要将很多行从pick改为s - torek
2
当然,如果你想要或需要rebase的额外功能,请使用rebase。 - torek
https://dev59.com/JGgu5IYBdhLWcg3wln8O#11225432 在 https://stackoverflow.com/search?q=%5Bgit%5D+What+is+the+difference+between+%22git+rebase%22+%22git+reset%22 中找到 - phd
2个回答

2

git rebase -i 允许你交互式地变基提交范围-你可以选择要采取哪些提交,哪些要删除,重新排序它们,在某些点手动介入,以及像你注意到的那样,压缩它们等。

git reset --soft 只是删除所有提交,保留索引。


更准确地说,保持索引和工作树不变(已删除的提交仍然存在,只是现在很难找到)。 - torek

2

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

git reset --soft HEAD~N

将分支的HEAD指针向后移动N个提交,并同时将这些提交中的工作放入暂存区。如果您从此时提交,您将把这些提交压缩成一个新的提交。

rebase选项:

git rebase -i HEAD~N

会弹出一个窗口,显示前N个提交。对于每个提交,您可以选择保留、压缩、改写等操作。如果在问题提交中选择压缩,则可以实现与上述软重置选项相同的结果。但是,交互式变基比此方法更加强大。您使用哪种方法取决于操作的复杂性。我们可能认为软重置是交互式变基的简易版,后者更加强大。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接