git,rebase v交互式rebase,git目录结构

时间:2018-10-17 14:57:29

标签: git git-rebase git-interactive-rebase

当我执行git rebase <base-commit>时,我看到目录.git/rebase-apply已创建,其中包含文件ontoorig-headoriginal-commit,引用了{{1} },<base-commit>和当前提交。

当我执行head时,我看到的目录git rebase -i <base-commit>包含文件.git/rebase-mergeontoorig-head,其中stopped-sha似乎与stopped-sha等价。

我的问题是,为什么交互式和非交互式rebase之间的文件名和目录名不一致?我对文件的理解正确吗?

1 个答案:

答案 0 :(得分:2)

您遇到了git format-patch | git am样式重新设置和git cherry-pick样式重新设置之间的区别。作为jthill noted in a comment,对于大多数用户而言,在大多数情况下它们并不打算有所不同。它们最初分为两个不同的后端,拼写为git-rebase--amgit-rebase--interactive。 (它们仍然存在,但是区别正在减弱。)

两者之间有一个重要的区别,与文件重命名检测有关。由于Cherry-pick重设库实际上使用了git cherry-pick机制,而该机制使用了底层的 merge 机制,因此启用了重命名检测。由于format-patch rebase不会,因此不会。重命名检测很慢,因此,如果没有重命名,则有时格式补丁会变快。

您可以通过将git rebase-m-s <strategy>参数添加到任何基准库来强制-X <extended-strategy-option>使用cherry-pick模式而不进行交互式基准库。