为什么`git rebase`应用所有提交而不是仅应用最后一个提交?

Hun*_*nle 4 git git-rebase

我知道它是如何git rebase工作的,我已经在生产中使用了一段时间.它将分支的所有提交重放到另一个分支上.它会重写您当前分支的历史记录.

我最近开始玩git rebase --skip,虽然我最初害怕它.我意识到它只是跳过那个承诺就好像从未发生过一样.

在我看来,在这两种情况下生成的工作目录是相同的:

1)除最近的提交外,所有提交都被跳过

2)重放所有提交,以便解决提交以支持their分支.

提醒: their是您在重新绑定时当前所在的分支.
其他提醒:我对工作目录特别感兴趣.这是一样的吗?

工作目录是否是相同的结果?

krl*_*mlr 6

一般来说,没有.提交的重放与cherry-pick操作非常相似.不应用存储库的状态,只应用与该提交对应的补丁(= diff,changeset,...).如果您跳过提交,则省略更改集,这可能会也可能不会导致冲突.无论哪种方式,只跳过提交通常会产生相同的结果.

但是,如果执行交互式rebase并将所有提交压缩为一个,则生成的工作树应该相同.如有必要,请务必了解如何撤消git rebase.(或者更好的是,在一次性分支中执行所有的变基操作,从原始的"他们的"分支分支.然后,你总是可以通过比较那个重新定位的一次性分支和"他们的"来仔细检查结果是否已经改变.分支,并在一切都很好之后更新"他们的"分支.)

  • 它将提交的*diffs*一次应用为*patch*.如果您跳过一个,则表示您没有应用它,并且在那里所做的更改将不会显示在生成的工作目录中.结果相同的唯一情况是,如果被跳过的提交中的更改被未被跳过的后续提交完全覆盖. (2认同)