如果我有以下提交
38deab3 Bug Fix# 10
f33fb65 Bug Fix# 20
4fa0485 Bug Fix# 30
为什么git rebase -i f33fb65
允许我编辑 38deab3 而不是 f33fb65?为什么我必须运行git rebase -i 4fa0485
编辑 f33fb65?
您需要一个基本提交rebase
,一些不会更改的提交,因为在交互期间执行任何其他操作rebase
都会更改提交的 sha id ......当然,除非您压缩/修复以下提交进入挑选的提交!
关键是,该rebase
命令不会提前知道您将rebase
如何提交,因此它需要一个保证不会被rebase
.
git rebase -i 4fa0485
意思是:将我当前的分支(比如master
)重新设置在4fa0485
. 因此,它将允许您编辑从最后一次提交之后开始的所有4fa0485
提交master
。
因为 rebase 是在您选择的提交之后应用提交。您正在重新选择这个选择的基础,所以您说“使用 f33fb65 并重新应用我所拥有的一切”。
git rebase 似乎 rebase 到指定的提交(无论你是通过提交 SHA 还是 eg HEAD~4
)。
所以你应该使用提交相关符号来选择你知道并想要修改的提交!
$ git rebase -i <SHA>~1
这包括您指定的提交(作为您之前的提交)
语法:
$ git rebase -i <SHA>~<number>
这将从最近的提交中进行选择,直到不包括<number>
您选择的更多提交!
使用如下示例提交历史记录:
aaa first commit
bbb add a function
ccc add terrible colour scheme
ddd another function
eee my most recent function
而且您想删除提交中可怕的配色方案更改ccc
您将输入并获得以下输出。
$ git rebase -i ccc~1
pick ccc add terrible colour scheme
pick ddd another function
pick eee my most recent function