当我执行git rebase <base-commit>时,我看到目录.git/rebase-apply被创建,其中包含文件onto、orig-head和original-commit,分别引用了<base-commit>、head和正在应用的当前提交。
当我执行git rebase -i <base-commit>时,我看到的目录是.git/rebase-merge,其中包含文件onto、orig-head和stopped-sha,其中stopped-sha似乎等同于original-commit。
我的问题是,为什么交互式和非交互式rebase之间的文件和目录命名存在差异?我对这些文件的理解正确吗?
发布于 2018-10-17 23:55:29
您已经遇到了git format-patch | git am样式rebase和git cherry-pick样式rebase之间的区别。作为jthill noted in a comment,对于大多数用户来说,这些并不意味着在大多数情况下是不同的。它们最初被分成两个不同的后端,拼写为git-rebase--am和git-rebase--interactive。(它们仍然是,但这种区别正在减弱。)
两者之间有一个重要的区别,那就是文件重命名检测。由于cherry-pick rebase从字面上使用了git cherry-pick机制,该机制使用了底层的合并机制,因此启用了重命名检测。因为format-patch rebase不会,所以它不会。重命名检测很慢,所以如果没有重命名,有时格式补丁的变化会更快。
您可以通过向任何rebase添加-m或-s <strategy>或-X <extended-strategy-option>参数,强制git rebase使用樱桃挑选模式,而无需转到交互式rebase。
https://stackoverflow.com/questions/52857890
复制相似问题