当我执行git rebase <base-commit>
时,我看到目录.git/rebase-apply
已创建,其中包含文件onto
,orig-head
和original-commit
,引用了{{1} },<base-commit>
和当前提交。
当我执行head
时,我看到的目录git rebase -i <base-commit>
包含文件.git/rebase-merge
,onto
和orig-head
,其中stopped-sha
似乎与stopped-sha
等价。
我的问题是,为什么交互式和非交互式rebase之间的文件名和目录名不一致?我对文件的理解正确吗?
答案 0 :(得分:2)
您遇到了git format-patch | git am
样式重新设置和git cherry-pick
样式重新设置之间的区别。作为jthill noted in a comment,对于大多数用户而言,在大多数情况下它们并不打算有所不同。它们最初分为两个不同的后端,拼写为git-rebase--am
和git-rebase--interactive
。 (它们仍然存在,但是区别正在减弱。)
两者之间有一个重要的区别,与文件重命名检测有关。由于Cherry-pick重设库实际上使用了git cherry-pick
机制,而该机制使用了底层的 merge 机制,因此启用了重命名检测。由于format-patch rebase不会,因此不会。重命名检测很慢,因此,如果没有重命名,则有时格式补丁会变快。
您可以通过将git rebase
或-m
或-s <strategy>
参数添加到任何基准库来强制-X <extended-strategy-option>
使用cherry-pick模式而不进行交互式基准库。