重新定位特定的SHA1

时间:2013-09-03 06:04:32

标签: git

如果我有以下提交

38deab3 Bug Fix# 10
f33fb65 Bug Fix# 20
4fa0485 Bug Fix# 30

为什么git rebase -i f33fb65允许我编辑38deab3而不是f33fb65?为什么我有 运行git rebase -i 4fa0485编辑f33fb65?

Source.

4 个答案:

答案 0 :(得分:3)

因为rebase正在您选择的提交之后应用提交。你正在对这个选择的那个进行调整,所以你说“拿f33fb65然后重新申请我拥有的一切”。

答案 1 :(得分:3)

git rebase -i 4fa0485表示:在master之上重新定义当前分支(例如4fa0485)。因此,它允许您编辑从4fa0485开始直到master上次提交的所有提交。

答案 2 :(得分:3)

您需要对rebase进行基本提交,一些不会更改的提交,因为在交互式rebase期间执行除选择之外的任何操作都将更改提交的sha id。当然,你将以下提交压缩/修复到挑选的提交中!

关键是,rebase命令将不会提前知道您将如何rebase提交,因此它需要保证不会被{{1更改的基本提交}}

答案 3 :(得分:0)

git rebase似乎可以根据指定的提交(无论是通过提交SHA还是例如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