如果我有以下提交
38deab3 Bug Fix# 10
f33fb65 Bug Fix# 20
4fa0485 Bug Fix# 30
Run Code Online (Sandbox Code Playgroud)
为什么git rebase -i f33fb65允许我编辑 38deab3 而不是 f33fb65?为什么我必须运行git rebase -i 4fa0485才能编辑 f33fb65?
git rebase 似乎会变基到指定的提交(无论您是通过提交 SHA 还是例如来执行此操作HEAD~4)。
因此,您应该使用提交相对符号来选择您知道并想要修改的提交!
$ git rebase -i <SHA>~1
Run Code Online (Sandbox Code Playgroud)
这包括您指定的提交(当您转到之前的提交时)
句法:
$ git rebase -i <SHA>~<number>
Run Code Online (Sandbox Code Playgroud)
这将从最近的提交中进行选择,直到不包括<number>您选择的更多提交!
举个例子,提交历史记录如下:
aaa first commit
bbb add a function
ccc add terrible colour scheme
ddd another function
eee my most recent function
Run Code Online (Sandbox Code Playgroud)
并且您想删除提交中可怕的配色方案更改ccc
您将输入并获得以下输出。
$ git rebase -i ccc~1
pick ccc add terrible colour scheme
pick ddd another function
pick eee my most recent function
Run Code Online (Sandbox Code Playgroud)
小智 5
你需要一个基础提交rebase,一些不会改变的提交,因为在交互期间做除了选择之外的任何事情rebase都会改变提交的 sha id......当然,除非你压缩/修复以下提交进入选择的提交!
关键是,该rebase命令不会提前知道您将rebase如何提交,因此它需要一个基础提交,保证不会被rebase.