重新绑定特定的 SHA1

Ant*_*ony 5 git

如果我有以下提交

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?

来源。

Ste*_*ier 6

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.