0

当我这样做时git rebase <base-commit>,我看到.git/rebase-apply创建的目录包含文件onto、、orig-headoriginal-commit、引用<base-commit>head和分别应用的当前提交。

当我这样做时git rebase -i <base-commit>,我会看到.git/rebase-merge包含文件onto、、orig-head和的目录stopped-sha,其中stopped-sha似乎等同于original-commit.

我的问题是为什么交互式和非交互式 rebase 之间的文件和目录命名存在差异?我对文件的理解是否正确?

4

1 回答 1

2

您已经遇到了git format-patch | git am样式变基和git cherry-pick样式变基之间的区别。正如jthill 在评论中指出的那样,在大多数情况下,对于大多数用户来说,这些并不打算有所不同。它们最初被分成两个不同的后端,拼写git-rebase--amgit-rebase--interactive. (它们仍然是,但区别正在减弱。)

两者之间有一个重要区别,与文件重命名检测有关。由于cherry-pick rebase 从字面上使用了git cherry-pick使用底层合并机制的机制,因此可以进行重命名检测。由于 format-patch rebase 没有,所以它没有。重命名检测很慢,所以如果没有重命名,有时格式补丁变种会更快。

您可以通过向任何变基添加或或参数来强制git rebase使用樱桃挑选模式,而无需进行交互式变基。-m-s <strategy>-X <extended-strategy-option>

于 2018-10-17T15:55:28.780 回答